我在循环中有一些变量,每次迭代都不同。
使用这些变量,我想用一些子对象填充一个新对象,如下所示:
newProduct[key][prop][val] = "value";
我想要的是像
这样的对象car{ //key
color: { //prop
door: "value" //val + value
}
}
但我的问题是[val]
不是来自[prop]
的对象,而这正是Node.JS尝试做的。
我已尝试过其他一些括号,例如[prop[val]]
和[prop + "." + val]
,但这似乎不起作用。
我怎样才能让它发挥作用?
答案 0 :(得分:2)
您可以检查每个属性并使用默认对象。稍后分配值
function setValue(object, path, value) {
var last = path.pop();
path.reduce((o, k) => o[k] = o[k] || {}, object)[last] = value;
}
var newProduct = {};
setValue(newProduct, ['car', 'color', 'door'], 42);
console.log(newProduct);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)
尝试使用Object赋值:
// It should be every iteration values
var key = 'car';
var prop = 'color';
var val = 'door';
var value = 'value';
var newProduct = Object.assign({ [ key ] :{ [ prop ] : { [ val ] : value }} });
console.log(newProduct);

答案 2 :(得分:0)
您需要先在每个图层上创建每个对象,然后才能使用它。这是一个非常简单的例子。您可以对其进行优化以使其更易于重复使用,显然:
var newProduct = {};
if (!newProduct["car"]) newProduct["car"] = {};
if (!newProduct["car"]["color"]) newProduct["car"]["color"] = {};
newProduct["car"]["color"]["door"] = "value";
console.log(newProduct);