javascript - 如何合并两个对象的对象值
问题描述
我有两个这样的对象,想合并它们:
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。
解决方案
您可以使用扩展运算符。
更新 :
如果 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)
推荐阅读
- apache-spark - kafka custom partitioner with pyspark structured streaming
- c# - 将自定义事件表单从一页发送到另一页
- python - 'tuple' object cannot be interpreted as an integer after running a created function
- python - How can I use timeout and readable() properly in the pyserial?
- java - JDBC Driver Does Not Exist
- python - 是否可以将 google VM 实例从一个帐户迁移到另一个保留其外部 IP 的帐户?
- azure - 针对本地 Active Director 执行 Powershell 脚本
- node.js - TypeORM 实体关系未按预期工作
- mongodb - MongoDB IAM 身份验证:无法使用 IAM 角色进行身份验证
- reactjs - Springboot 对 React 的安全性 - 如何在没有身份验证的情况下将页面转发到 index.html