使用JavaScript给出以下两个对象:
let sample1 = {a: 1}
let sample2 = {a: 1000, b: 2000, c: 3000}
如何在不覆盖第一个对象的属性的情况下将它们合并为一个?
我同时尝试了Object.assign
和散布运算符...
,但它们都覆盖了我的属性,因此不使用lodash的最佳解决方案是什么?
所需的输出将是:
const result = {a: 1, b: 2000, c: 3000}
答案 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}