如何在Javascript中设置对象的动态属性?

时间:2018-10-01 09:46:55

标签: javascript

动态地,我得到了几个具有以下结构的对象。

obj1 = {
   prop: 'one',
   key: 'string',
   value: 2
}

obj2 = {
   prop: 'one',
   key: 'diffString',
   value: 3
 }

此外,我还有一个对象,我想使用接收到的对象将其转换为对象。

mainObject = {
   prop: {
     key1: value,
     key2: value
   }
}

我正在尝试使用此

mainObject[obj.prop][obj.key] = obj.value;

但是它给了我一个错误,因为此时mainObject只是一个空对象,没有mainObject[obj.prop]

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

最简单的方法如下:

// If no value for obj.prop exists, assign empty object
mainObject[obj.prop] = mainObject[obj.prop] || {}; 

// Assign value to obj.key of object at mainObject[obj.prop]
mainObject[obj.prop][obj.key] = obj.value;

此代码首先确保obj.prop上的键mainObject上存在有效值(对象)。如果键obj.prop上没有有效的对象,则为新的空对象分配{}

现在可以安全地执行mainObject[obj.prop][obj.key] = obj.value分配,只要在mainObject[obj.prop]处存在一个对象即可。

或者,如果您想要更简洁的方法,可以考虑使用提供.set() method的lodash库:

_.set(mainObject, obj.prop + '.' + obj.prop, obj.value);

希望这会有所帮助!

答案 1 :(得分:1)

您所能做的就是将即将到来的对象推入数组,并通过使用reduce方法可以简单地实现所需的输出

let mainObject = [obj1, obj2].reduce((result, obj) => {
    result[obj.prop] = result[obj.prop] || {};
    result[obj.prop][obj.key] = obj.value;
    return result;
}, {});