如何合并两个JSON对象但不包含第一个Object中不存在的属性?
var obj1 = { x:'', y:{ a:'', b:'' } };
var obj2 = { x:1, y:{ a:1, b:2, c:3 }, z:'' };
obj1 = { x:1, y:{ a:1, b:2 } };
PS。对象有preventExtensions的方法,但它似乎只阻止属性的直接扩展而不是更深层的属性。
答案 0 :(得分:4)
/*
Recursively merge properties of two objects
ONLY for properties that exist in obj1
*/
var obj1 = { x:'', y:{ a:'', b:'' } };
var obj2 = { x:1, y:{ a:1, b:2, c:3 }, z:'' };
function merge(obj1, obj2) {
for( var p in obj2 )
if( obj1.hasOwnProperty(p) )
obj1[p] = typeof obj2[p] === 'object' ? merge(obj1[p], obj2[p]) : obj2[p];
return obj1;
}
merge(obj1, obj2 );
console.dir( obj1 ); // { x:1, y:{ a:1, b:2 } }
答案 1 :(得分:0)
对解决方案进行微调,添加对数组的支持(替换,不附加 - 这将更难):
function merge(obj1, obj2) {
for( var p in obj2 )
if( obj1.hasOwnProperty(p) )
obj1[p] = (typeof obj2[p] === 'object' && !(p.length)) ? merge(obj1[p], obj2[p]) : obj2[p];
return obj1;
}