我有两个这样的对象并想合并它们:
const obj1 = {
1: { foo: 1 },
2: { bar: 2, fooBar: 3 },
3: { fooBar: 3 },
};
const obj2 = {
1: { foo: 1, bar: 2 },
2: { bar: 2 },
};
const merged = someMergingMethod(obj1, obj2);
merged === {
1: { foo: 1, bar: 2 },
2: { bar: 2, fooBar: 3 },
3: { fooBar: 3 },
};
我的意思是,如果键重复,我不仅要合并对象,还要合并其对象值的属性。
因为只要 merged = { ...obj1, ...obj2 };
就会用 obj2 的属性覆盖属性。
最简单的方法是什么?
我可以使用 ES2017 和其他库,例如 lodash。
最佳答案
您可以使用扩展运算符。
更新:
if obj2 has some properties that obj1 does not have?
最初,我写这个答案时假设键的索引类似于 0,1 等
,但正如您在评论中提到的那样,情况并非如此,您可以构建一个键数组并进行迭代它作为
@Nick 在评论中非常简洁地添加了[...Object.keys(obj1), ...Object.keys(obj2)]
let obj1 = {1: { foo: 1 },2: { bar: 2, fooBar: 3 },3: { fooBar: 3 },};
let obj2 = {1: { foo: 1, bar: 2 },2: { bar: 2 },};
let keys = [...new Set([...Object.keys(obj1),...Object.keys(obj2)])]
let op = {}
let merged = keys.forEach(key=>{
op[key] = {
...obj1[key],
...obj2[key]
}
})
console.log(op)
关于javascript - 如何合并两个对象的对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54376660/