You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED仪表板图表生成函数故障排查求助

Node-RED图表生成问题修复方案

代码中的核心问题

  • 变量拼写错误:inpuy_data → input_data;input_data[int] → input_data[inp]
  • 未重置临时数组:year2017每次循环后未清空,导致不同产品的数据累加混淆
  • 匹配逻辑错误:用空数组data[inp]匹配Product,应直接使用input_data[inp]
  • 未处理年份筛选:未结合按钮选择的年份过滤原始数据

修正后的函数代码

// 获取用户输入的产品列表
var input_data = context.global.input_data;
// 从按钮传递的消息中获取选中的年份(根据你的按钮配置调整,示例用msg.topic存储年份)
var selectedYear = msg.topic;

var seriesData = [];
var productNames = input_data; // 直接用输入的产品名作为系列名称

// 遍历每个输入的产品
input_data.forEach(function(product) {
    var productData = [];
    // 筛选对应产品和选中年份的有效数据
    msg.payload.forEach(function(item) {
        if (item.Product === product && item.Year == selectedYear && item.Energy) {
            productData.push({ x: product, y: item.Energy });
            // 若为按年份趋势的折线图,可改为:
            // productData.push({ x: item.Year, y: item.Energy });
        }
    });
    seriesData.push(productData);
});

// 组装图表所需格式
msg.payload = [{
    series: productNames, // 填入用户输入的产品名称数组,如["产品A", "产品B"]
    data: seriesData,     // 每个产品对应的数据集合
    labels: [selectedYear] // 填入选中的年份,多年份场景可提取所有唯一年份数组
}];

return msg;

series和labels的填写说明

  • series:对应图表的系列名称,直接使用用户输入的产品名称数组(input_data)。比如用户输入"产品X"和"产品Y",series就填["产品X", "产品Y"],图表会生成对应两个系列的图形。
  • labels:根据图表类型调整:
    • 单年份统计(如柱状图对比产品能耗):填选中的年份数组,如["2017"]
    • 多年份趋势(如折线图展示年度变化):提取原始数据中所有唯一的年份数组,如["2017", "2018", "2019"]

额外注意事项

  • 确保按钮选择的年份能正确传递到函数节点,比如将按钮的msg.topic设为年份值(如"2017")
  • 若用户输入的产品是逗号分隔的字符串,需先转为数组:input_data = context.global.input_data.split(",").map(item => item.trim())

内容的提问来源于stack exchange,提问作者Ekisha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:22:35