// 遇到相同元素级属性,以(minor)为准 // 不返还新Object,而是main改变
function mergeJSON(minor, main) {
for(var key in minor) {
if(main[key] === undefined) { // 不冲突的,直接赋值
main[key] = minor[key];
continue;
}
// 冲突了,如果是Object,看看有么有不冲突的属性
// 不是Object 则以(minor)为准为主,
console.log(key)
if(isJSON(minor[key])||isArray(minor[key])) { // arguments.callee 递归调用,并且与函数名解耦
console.log("is json")
//arguments.callee(minor[key], main[key]);
mergeJSON(minor[key], main[key]);
}else{
main[key] = minor[key];
}
}
}
function isJSON(target) {
return typeof target == "object" && target.constructor == Object;
}
function isArray(o) {
return Object.prototype.toString.call(o) == '[object Array]';
}
var a = {
ccc: {
d: 111,
b: 222,
a: 222,
ee: [{
a: 1
}, {
b: 2
}]
}
};
var b = {
ccc: {
fff: 666,
ee: [{
c: 3
}]
}
};
mergeJSON(b, a);
console.log(a);
console.log(b);