其他分享
首页 > 其他分享> > 对象的深合并

对象的深合并

作者:互联网

  最近在开发中,遇到一个需求,需要进行对象的合并,例如下面的两个对象

let a = {
      info:{
        name:"张三",
        age:18,
        experience:{
          first:"刚上一年级",
          two:"已经二年级了"
        }
      },
      study:"我爱学习1111"
    }

    let b = {
      info:{
        name:"张三",
        age:18,
        experience:{
          first:"我是first",
        }
      },
      study:"我爱学习",
      name:"33"
    }

  首先想到的就是使用 Object.assign() 进行合并,但是这是一个浅合并,深层的数据直接会被后面的参数替换掉

  所以我们可以自己写一个函数进行合并

思路:

  需要查找到每一个对象进行依次合并,从上往下查找,直到最内层的对象进行合并

    简单的写就是

    

for(let key in b){
      a[key]===b[key]
    }

但是这样只有一层,内层的对象就会被直接替换掉,要想修改内层的对象需要判断当前的这个b[key]是不是一个对象,我们可以使用 原型链或者直接转化为字符串进行判断,这里我们使用的是字符串

a[key] = a[key] && a[key].toString() === "[object Object]"?"?????":(a[key]=b[key]);
????? 这里的问号不过是在走一次逻辑而已


所以完整版的我们可以写成递归函数
function deepMerge(obj1,obj2){
      for(let key in obj2){
        obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]"?deepMerge(obj1[key],obj2[key]):(obj1[key]=obj2[key]);
      };
      return obj1;
    }

使用的时候只需要调用一下deepMerge()

这里会返回合并后的对象

 

  如果有更好的写法欢迎大家进行留言分享

标签:obj1,obj2,对象,合并,let,key
来源: https://www.cnblogs.com/web-ydx/p/16409176.html