Javascript 合并两个对象而不覆盖相同的属性
给定Javascript中的以下两个对象:Javascript 合并两个对象而不覆盖相同的属性,javascript,Javascript,给定Javascript中的以下两个对象: 让sample1={a:1} 设样本2={a:1000,b:2000,c:3000} 如何在不覆盖第一个对象的属性的情况下将它们合并为一个对象? 我尝试了Object.assign和spread操作符…,但它们都覆盖了我的属性,那么不使用lodash的最佳解决方案是什么 所需的输出将是: constresult={a:1,b:2000,c:3000} 不清楚您想要什么。它在标题中说,您不想覆盖属性,但您声明了所需的结果(“因此,使用lodash co
让sample1={a:1}
设样本2={a:1000,b:2000,c:3000}
如何在不覆盖第一个对象的属性的情况下将它们合并为一个对象?
我尝试了Object.assign
和spread操作符…
,但它们都覆盖了我的属性,那么不使用lodash的最佳解决方案是什么
所需的输出将是:
constresult={a:1,b:2000,c:3000}
不清楚您想要什么。它在标题中说,您不想覆盖属性,但您声明了所需的结果(“因此,使用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};
变量集合={sample1,sample2};
log(“合并的示例:”);
控制台日志(收集);
log(“如何访问collection.sample1:”);
console.log(collection.sample1)代码>如果目标是合并两个对象而不影响第一个对象中已有的键,则可以创建自己的实用函数,如下所示
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}对象。分配({},sample2,sample1)
@Taplar-我想这似乎是OP想要的,但是当sample2
包含sample1
所包含的键时,它将覆盖属性。我不认为在同一个对象中有多个键是可能的,因为对象不能有重复的键,至少不在同一层次结构中——否则您将如何访问它们?@marsnebulas在其const result
行的问题的最后一行显示了他们想要的。结果具有来自sample2的非重复属性,以及来自sample1的值,该值是重复的。@Taplar-好的,我认为我当时不理解这个问题,因为我认为const-result…
是他们出于某种原因不想要的,只是使用对象分解,以使const-result={…sample2,…sample1}