深度合并

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; //返回对象
}
上一篇下一篇

猜你喜欢

热点阅读