1.思路分析
1.我们要实现,如果目标对象中的属性具与源对象有相同的键并且相同的键的值也为对象,则将此对象也进行相同规则的合并,否则属性将被源对象中的属性覆盖,并且不同的键会同时存在
2.首先要理解,target是主体,遍历sources对象,判断如果target对象存在相同键并且同时为对象,递归调用合并方法,否则将target对象键值替换
3.返回新对象
2.代码
function merge(target) {
for (let i = 1, j = arguments.length; i < j; i++) {
let source = arguments[i] || {};
for (let prop in source) {
if (source.hasOwnProperty(prop)) {
let value = source[prop];
if (value !== undefined) {
target[prop] = value;
}
}
}
}
return target;
};
测试
merge({}, {q: 1, series: [{a: 1, b: 2, data: [4]}]}, {a: 2, series: [{ a: 3, b: 4, data: [1, 2, 3] }] })