如何使用变量动态创建对象

时间:2017-11-03 11:30:21

标签: javascript

我在循环中有一些变量,每次迭代都不同。

使用这些变量,我想用一些子对象填充一个新对象,如下所示:

newProduct[key][prop][val] = "value";

我想要的是像

这样的对象
car{ //key
   color: { //prop
       door: "value" //val + value
   }
}

但我的问题是[val]不是来自[prop]的对象,而这正是Node.JS尝试做的。

我已尝试过其他一些括号,例如[prop[val]][prop + "." + val],但这似乎不起作用。 我怎样才能让它发挥作用?

3 个答案:

答案 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);

相关问题