Node-RED 如何使用变量值作为消息对象的键名/标识符
问题核心原因
在对象字面量中书写{ alias: src }属于典型的JS语法认知偏差:
传统对象字面量的属性位置,直接书写的标识符会被JS引擎直接解析为固定的字符串键名——哪怕这个标识符和外层定义的变量名完全一致,引擎也不会去读取变量存储的实际值。这就是最终生成的对象全是固定"alias"键,没有用到myalias1、myalias2这类字段实际值的原因。
两种可直接落地的实现方案
- 方案1:使用ES6+ 计算属性语法(最简洁,Node-RED内置运行环境完全支持)
只需要把要作为键名的变量,用方括号包裹在对象字面量的属性位置即可。JS会动态计算方括号内表达式的返回值,将其转换为字符串后作为对象的键名。
对应修改原来的push逻辑:把写死键的{ alias : src }改为{ [alias]: src } - 方案2:手动动态赋值(兼容所有JS运行版本)
不依赖对象字面量的新语法,先创建空对象,再通过方括号动态访问对象属性的方式添加键值对:// 替换原来循环内的push逻辑 const singleItem = {}; singleItem[alias] = src; result.push(singleItem);
适配Node-RED场景的完整修正代码
直接替换原有函数节点内的全部逻辑即可:
var result = []; for(var i = 0; i < msg.payload.length; i++) { var alias = msg.payload[i].alias; var src = msg.payload[i].source_id; // 用变量的实际值作为对象键名 result.push({ [alias] : src }); } msg.options = result; return msg;
代码中原先定义的未使用空字符串变量
str可以直接删除,减少冗余逻辑。
内容的提问来源于stack exchange,提问作者Joline
相关产品推荐
相关产品推荐

