两行代码搞定js对象深浅拷贝
有一段时间没有更新博客了,忙于工作。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年完成自己的小目标。