动态地,我得到了几个具有以下结构的对象。
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]
任何帮助将不胜感激。
答案 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;
}, {});