有一段时间没有更新博客了,忙于工作。2018年刚过去,今天来开启2018第一篇博文。好了,咱们步入正题。
先上代码
/** * 遍历对象 * 1.判断是不是原始值 * 2.判断是数组还是对象 * 3.建立相应的数组或对象 * 递归 */var obj={ ???name:"aaa", ???age:23, ???hobby:["basketball","music","coding"], ???lover:{ ???????name:"aaa", ???????age:23, ???????hobby:["sleep","movie","eat"] ???}}var obj1={};function deepCopy(origin,target){ ???var target=target||{};//容错处理 ???????for (var i in origin) { ???????????if(origin.hasOwnProperty(i)){ ?//避免把原型上的属性遍历出来 ???????????????if(typeof origin[i]=="object"){//先判断是引用值 ???????????????????if(origin[i] instanceof Array){//判断是数组 ???????????????????????target[i]=[]; ???????????????????????deepCopy(origin[i],target[i]); ???????????????????}else{ ???????????????????????target[i]={}; //判断是对象 ???????????????????????deepCopy(origin[i],target[i]); ???????????????????} ???????????????}else{//原始值直接赋值 ???????????????????target[i]=origin[i]; ???????????????} ???????} ???} ???return target;//返回拷贝后的对象}deepCopy(obj,obj1);console.log(obj,obj1);
代码解释的很清楚,精简一下代码(核心代码就两行)
function deepCopy(origin,target){ ???for (var i in origin) { ???????var target=target||{}; ???????if(origin.hasOwnProperty(i)){ ???????????//核心代码就两行 ???????????typeof origin[i]=="object"?(origin[i] instanceof Array?deepCopy(origin[i],target[i]=[]):deepCopy(origin[i],target[i]={})):target[i]=origin[i]; ???????} ???} ???return target;}deepCopy(obj,obj1);console.log(obj,obj1);
首先深复制和浅复制只针对像 Object, Array 这样的复杂对象的。简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。
新年新气象,祝大家都能在2018年完成自己的小目标。
两行代码搞定js对象深浅拷贝
原文地址:https://www.cnblogs.com/zt123123/p/8283298.html