不同于extend()
,merge()
递归地进入源对象的对象属性,执行深层复制。
angular.merge(object1, object2); // merge object 2 into object 1
没有理由不应该使用简单的递归算法:)
假设它们都是JSON.stringify或类似结果:
function merge(obj1,obj2){ // Our merge function
var result = {}; // return result
for(var i in obj1){ // for every property in obj1
if((i in obj2) && (typeof obj1[i] === "object") && (i !== null)){
result[i] = merge(obj1[i],obj2[i]); // if it's an object, merge
}else{
result[i] = obj1[i]; // add it to result
}
}
for(i in obj2){ // add the remaining properties from object 2
if(i in result){ //conflict
continue;
}
result[i] = obj2[i];
}
return result;
}