我正在使用S7节点从SIEMENS PLC获取数据 我有一个巨大的数据列表要取出,我想重新创建一个对象 我尝试将变量命名为:
line1.color.value
line1.speed.value
line2.color.value
line2.speed.value
如果我尝试使用 msg.payload.line1.color.value 获取值,它不起作用,没有对应的对象。
我想在变量名称后面自动创建对象 line1,line2...。 有办法做到吗?
要实现类似于 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”函数将对象、路径和要设置的值作为参数。如果路径是字符串,则将其拆分为路径数组。递归创建嵌套属性并在路径末尾设置给定值。
set(msg.payload,'line1.color.value',1);
set(msg.payload,'line2.color.value',2);
set(msg.payload,'line3.color.value',3);