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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 20:54:07