Tai*_*chi 2 javascript object ecmascript-6 lodash
我有两个这样的对象并想合并它们:
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 },
};
Run Code Online (Sandbox Code Playgroud)
我的意思是,我不仅要合并对象,还要合并对象值的属性(如果键重复)。因为只是merged = { ...obj1, ...obj2 };用 obj2 覆盖了属性。
什么是最简单的方法来做到这一点?
我可以使用 ES2017 和其他库,如 lodash。
您可以使用扩展运算符。
更新 :
如果 obj2 有一些 obj1 没有的属性?
最初我写了这个答案,假设键被索引,0,1 and so on但正如你在评论中提到的,情况并非如此,你可以构建一个键数组,然后将其迭代为
正如@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)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |