javascript - 一个关于对象深合并的问题?
ringa_lee
ringa_lee 2017-04-11 12:55:31
[JavaScript讨论组]

现有两个对象:

var obj1 = {
    students: {
        lingxuan: {
            name: 'lingxuan',
            addr: 'guangzhou'
        }
    }
}

var obj2 = {
    students: {
        lingxuan: {
            mobile: '1823430****'
        }
    },
    teachers: {
        sam: {
            name: 'sam'
        }
    }
}

我想通过deepMerge(obj1, obj2)以后最终能得到(要用原生js):

newObj = {
    students: {
        lingxuan: {
            name: 'lingxuan',
            addr: 'guangzhou',
            mobile: '1823430****'
        }
    },
    teachers: {
         sam: {
            name: 'sam'
         }
    }
}

这个题目想了很久没想出来怎么解,也想过用递归和Object.assign但是得不到想要的结果,希望大神指点指点。

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
大家讲道理

感谢@小明同学的提醒,翻看了jQuery的源码有了思路,于是代码如下:

function deepMerge(obj1, obj2) {
    var key;
    for(key in obj2) {
        // 如果target(也就是obj1[key])存在,且是对象的话再去调用deepMerge,否则就是obj1[key]里面没这个对象,需要与obj2[key]合并
        obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" ?
        deepMerge(obj1[key], obj2[key]) : obj1[key] = obj2[key];
    }
    return obj1;
}
ringa_lee

可以看下lodash的merge

var object = {
  'a': [{ 'b': 2 }, { 'd': 4 }]
};
 
var other = {
  'a': [{ 'c': 3 }, { 'e': 5 }]
};
 
_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号