从变量名称创建对象

问题描述 投票:0回答:1

我正在使用S7节点从SIEMENS PLC获取数据 我有一个巨大的数据列表要取出,我想重新创建一个对象 我尝试将变量命名为:

line1.color.value
line1.speed.value
line2.color.value
line2.speed.value

如果我尝试使用 msg.payload.line1.color.value 获取值,它不起作用,没有对应的对象。

我想在变量名称后面自动创建对象 line1,line2...。 有办法做到吗?

node-red plc siemens
1个回答
0
投票

1.设置功能

要实现类似于 Lodash 中的“设置”功能,您可以使用递归来处理嵌套属性。这是一个简单的 JavaScript 实现:

function set(obj, path, value) {
  if (typeof path === 'string') {
    path = path.split('.');
  }

  if (path.length === 1) {
    obj[path[0]] = value;
    return obj;
  }

  const currentKey = path.shift();
  obj[currentKey] = obj[currentKey] || {};

  return set(obj[currentKey], path, value);
}

// eg:
const obj = {};
set(obj, 'a.b.c', 42);
console.log(obj); // output: { a: { b: { c: 42 } } }

这个“set”函数将对象、路径和要设置的值作为参数。如果路径是字符串,则将其拆分为路径数组。递归创建嵌套属性并在路径末尾设置给定值。

2.使用设置功能

set(msg.payload,'line1.color.value',1);
set(msg.payload,'line2.color.value',2);
set(msg.payload,'line3.color.value',3);
© www.soinside.com 2019 - 2024. All rights reserved.