使用散布运算符深度合并对象

时间:2020-05-20 00:00:32

标签: javascript recursion ecmascript-6

我可以像这样合并多个对象:

  var a = {k:{i:1, j:2}, m:6}
  var b = {k:{i:3, l:4}}
  var c = {
    ...a,
    ...b
  }

c的{​​{1}}很好;但是,c不包含m:6。这是因为k.j:2进行了浅覆盖。

我想递归使用...b,以使...中不在的嵌套属性不会被覆盖。

我喜欢b,因为它看上去如此快速干净。我可以在...的对象初始值设定项中这样做吗?


更新

我到目前为止已经很近了,但是似乎有点冗长:

c

1 个答案:

答案 0 :(得分:2)

使用...是不可能的。如果您事先知道对象的形状,尽管可以这样写:

  var a = {k:{i:1, j:2}, m:6}
  var b = {k:{i:3, l:4}}
  var c = {
    ...a,
    ...b,
    k: { ...a.k, ...b.k },
  }

否则,您将需要编写一个函数来执行此操作或搜索一个函数:https://www.npmjs.com/search?q=merge+deep