Javascript:使用传播算子合并两个对象

Ata*_*adi 6 javascript

var a = {
  1: {
    687: {
      name:'test1'
    }
  }
}
var b = {
  1: {
    689: {
      name:'test2'
    }
  }
}
var c = {
  ...a,
  ...b
}
console.log(c)
Run Code Online (Sandbox Code Playgroud)

我期望结果是:

{
  1: {
    687: {
      name:'test1'
    },
    689: {
      name:'test2'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但它是 :

{
  1: {
    689: {
      name:'test2'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我使用传播运算符错了吗?合并两个对象的最有效方法是什么?我做了一个遍历对象中每个键的函数,它可以工作,但我认为这不是写方法。

Object.assign({},a,b) 也返回相同的结果(第一个结果,我不需要)。

我遇到了一个问题:如何动态合并两个JavaScript对象的属性?

但这并不能回答我的问题。这个答案(/sf/answers/11987951/)也不是我想要的。

提前致谢。

Ata*_*adi 7

lodash merge 实际上做了我真正需要的。

https://blog.mariusschulz.com/2015/03/30/combining-settings-objects-with-lodash-assign-or-merge

// Defined within your component
var defaultSettings = {
    strictMode: true,
    formatting: {
        finalNewline: true,
        quotes: "double"
    }
};

// Provided by the developer using your component
var userSettings = {
    formatting: {
        quotes: "single"
    }
};

var assignedSettings = _.assign({}, defaultSettings, userSettings);

// {
//     strictMode: true,
//     formatting: {
//         quotes: "single"
//     }
// }

var mergedSettings = _.merge({}, defaultSettings, userSettings);

// {
//     strictMode: true,
//     formatting: {
//         finalNewline: true,
//         quotes: "single"
//     }
// }
Run Code Online (Sandbox Code Playgroud)