对象的深合并
作者:互联网
最近在开发中,遇到一个需求,需要进行对象的合并,例如下面的两个对象
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