数组对象的深浅合并
-
浅合并:只会把没有冲突的属性合并上,对于有冲突的属性,后者会完全覆盖前者的属性值,且只会合并第一层
-
深合并:对于有冲突的属性,会把将两个属性值进行合并,而不是简单的让谁覆盖谁
function deepMearge(obj, target={}) {
// target 替换 obj
let p = {}; // 是为了调用 Object.prototype.toSring方便
for(let key in target) {
let isA = p.toString.call(obj[key]) === '[object Object]',
isB = p.toString.call(target[key]) === '[object Object]';
if(isA && isB) {
obj[key] = deepMearge(obj[key], target[key])
} else if(Array.isArray(obj[key]) && Array.isArray(target[key])){
// Array.from 方法可以把一个类数组对象转为数组
obj[key] = Array.from(new Set(obj[key].concat(target[key]))
)
} else {
obj[key] = target[key];
}
}
return obj;
}