// 遇到相同元素級屬性,以(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);