Node-RED函数计算异常求助:数组元素相加结果为undefined
解决Node-RED函数中数值计算返回undefined的问题
嘿,我一眼就看到问题所在啦——你犯了个新手很容易踩的小坑,完全算不上低级错误~
问题根源
你定义的msg0和msg1都是带有payload属性的对象,而不是直接的数值:
var msg0 = { payload :msg.payload[0] }; // 这是 {payload:250},不是250本身 var msg1 = { payload :msg.payload[1] }; // 这是 {payload:8},不是8本身
当你直接写var msg2 = msg0 + msg1;时,你是在尝试把两个对象相加,而不是它们内部的数值。JavaScript处理对象相加时,会把对象转为字符串"[object Object]",拼接后得到"[object Object][object Object]",Node-RED解析这个结果时就出现了你看到的undefined undefined。
修正方案
有两种简单的修正方式,选你习惯的就行:
方式1:先提取数值再计算
先把msg.payload里的数值取出来单独存储,再创建消息对象和计算结果:
// 先取出数组里的原始数值 const num0 = msg.payload[0]; const num1 = msg.payload[1]; // 分别创建对应消息 const msg0 = { payload: num0 }; const msg1 = { payload: num1 }; // 计算和并创建msg2 const msg2 = { payload: num0 + num1 }; return [msg0, msg1, msg2];
方式2:直接访问对象的payload属性计算
如果不想额外定义变量,直接在计算时访问msg0和msg1的payload属性就行:
var msgAll = { payload: msg.payload}; var msg0 = { payload :msg.payload[0] }; var msg1 = { payload :msg.payload[1] }; // 重点:访问payload属性获取数值再相加 var msg2 = { payload: msg0.payload + msg1.payload }; return [ msg0, msg1, msg2];
额外小提示
如果担心msg.payload里的元素可能是字符串类型(比如接口返回数字字符串),可以用Number()确保转换为数值:
const num0 = Number(msg.payload[0]);
这样修改后,msg2的payload就会正确返回258啦~
内容的提问来源于stack exchange,提问作者less.sebastian
相关产品推荐
相关产品推荐

