javascript - 如何合并两个对象的对象值

标签 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 },
};

我的意思是,如果键重复,我不仅要合并对象,还要合并其对象值的属性。 因为只要 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/

相关文章:

javascript - jQuery - 动态创建按钮并附加事件处理程序

node.js - 如何使用 ES6 在 NodeJS 中创建具有异步导出的模块

javascript - 数据未显示在选择标签中

javascript - 需要正则表达式帮助使用 Javascript 解析 mediawiki 模板

python - 在 python 映射对象中排序 json

javascript - 如何在javascript中对嵌套对象数组进行排序

javascript - 插入数组控制台日志可以看到但不会在 html 中呈现,为什么? Angular JS

javascript - 使用简写更新对象数组和 setState

javascript - 如何使用 FlowType 在 Javascript 中键入注释 "this"的构造函数

javascript - Immutable.js 的额外缩小?