我希望将一个对象 (parent
) 合并到另一个对象 (window
) 中,而不会覆盖现有的值。
这两个对象的键、值和长度都是未知的,但我可以合理地假设它们中会有嵌套对象。
由于某些原因,我无法重新创建目标对象,所以必须进行实际的合并。
在javascript中,最佳的方法是什么?
示例:
var target = {
prop1: {
prop1stuff1: 42,
prop3: 15.5
},
42: 'stuff'
};
var source = {
prop1: {
prop1stuff1: 42,
prop4: 17,
prop3: 18
},
'42': 'test'
};
function merge(t, s){
//code to merge source (s) into target (t)
//without overwriting existing values
//and without overwriting t with a new object
}
merge(target, source); //alter target by reference, does not return anything
console.log(target);
// ^ this outputs:
{
prop1: {
prop1stuff1: 42,
prop3: 15.5,
prop4: 17
},
42: 'stuff'
}
编辑:
我不能给目标分配一个新对象,我必须逐个添加属性。
我也不知道嵌套对象会有多深。
*第二次编辑:*
TJ Crowder的答案是有效的,但我尝试合并的对象包含许多循环引用,导致无限循环。
我添加了一个循环引用检测器,现在将更新TJ Crowder的答案。
target = result
,我需要逐个添加每个属性。 - x13