深度合并
2019-04-03 本文已影响0人
Simon_King
特殊的数据要求,数组为数组JSON对象,对象的值只有基础类型的值和数组。
需要给最后一层对象额外增加一个字段。根据此要求写出以下深度合并的方法
function deepMerge(source, target) {
let result = {}; //初始化一个空对象
for (let field in source) { //遍历第一个对象的每个字段
//如果该字段的值是数组
if (Object.prototype.toString.call(source[field]) === "[object Array]") {
source[field] = source[field].map( //调用map重组当前字段的值
//递归调用该合并函数
(value, index) => this.deepMerge(value, target[field][index])
)
}
}
result[field] = source[field];
for (let field in target) { //遍历第二个对象的每个字段
//查找result是否已经有值,添加不同的值
if (!result.hasOwnProperty(field)) {
result[field] = target[field]; //设置该字段的值
}
}
return result; //返回对象
}