合并两个对象而不覆盖相同的属性

时间:2020-10-28 18:28:58

标签: javascript

使用JavaScript给出以下两个对象:

let sample1 = {a: 1}
let sample2 = {a: 1000, b: 2000, c: 3000}

如何在不覆盖第一个对象的属性的情况下将它们合并为一个? 我同时尝试了Object.assign和散布运算符...,但它们都覆盖了我的属性,因此不使用lodash的最佳解决方案是什么?

所需的输出将是:

const result = {a: 1, b: 2000, c: 3000}

2 个答案:

答案 0 :(得分:1)

不清楚您想要什么。它在标题中说您不想覆盖属性,但是您声明了您想要的结果(“所以,用lodash const result = {a:1,b:2000,c:3000}是什么解决方案”)将被覆盖sample2.a。无论如何,除非您更改其中一个ID名称,否则您不能将两个具有相同名称的ID合并在一起(据我所知。如果您这样做,那么结果对象将更像是一个数组)。无论如何,您都可以执行此操作,但是我不确定您想要什么。您可以澄清问题吗?希望我能正确理解您的问题(我是Stackoverflow的新手)。

var sample1 = {a: 1};
var sample2 = {a: 1000, b: 2000, c: 3000};
var collection = {sample1, sample2};
console.log("the merged samples: ");
console.log(collection);
console.log("how to access collection.sample1: ");
console.log(collection.sample1);

答案 1 :(得分:0)

如果目标是在不影响第一个对象中已有的键的情况下合并两个对象,您可以像这样创建自己的实用函数。

function mergeObjectWithoutOverwriting(mainObject, objectToMerge) {
  Object.keys(objectToMerge).forEach(key => {
    if (!mainObject[key]) mainObject[key] = objectToMerge[key]
  })
  return mainObject
}

然后用它来合并您的对象。

var sample1 = {a: 1};
var sample2 = {a: 1000, b: 2000, c: 3000};

var mergedSample = mergeObjectWithoutOverwriting(sample1, sample2)

结果将是 {a: 1, b: 2000, c: 3000}

相关问题