深拷贝(递归)

Posted Booo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深拷贝(递归)相关的知识,希望对你有一定的参考价值。

使用jQuery的$.extend

var arr = [[‘a‘,‘b‘],0,1,2,{name:‘old‘}];
 
var newArr = $.extend(true, [], arr);
 
 

没有Function的对象中可以使用

var newObject = JSON.parse (JSON.stringify (oldObject));

ES6扩展运算符实现数组的深拷贝

var arr1=[1,2,3];
var arr2=[...arr1];

===================

var arr1=[1,2,3];
var arr2=Array.from(arr1);

对象的深拷贝(通用)

var json1={"name":"鹏哥","age":18,"arr1":[1,2,3,4,5],"string":‘afasfsafa‘,"arr2":[1,2,3,4,5],"arr3":[{"name1":"李鹏"},{"job":"前端开发"}]};
var json2={};
function copy(obj1,obj2){
  var obj2=obj2||{};                                           //最初的时候给它一个初始值=它自己或者是一个json
  for(var name in obj1){
    if(typeof obj1[name] === "object"){                        //先判断一下obj[name]是不是一个对象
      obj2[name]= (obj1[name].constructor===Array)?[]:{};      //我们让要复制的对象的name项=数组或者是json
      copy(obj1[name],obj2[name]);                             //然后来无限调用函数自己 递归思想
    }else{
      obj2[name]=obj1[name];                                   //如果不是对象,直接等于即可,不会发生引用。
    }
  }
  return obj2;                                                 //然后在把复制好的对象给return出去
}
json2=copy(json1,json2)
json1.arr1.push(6);
alert(json1.arr1);  //123456
alert(json2.arr1);  //12345
 

 

以上是关于深拷贝(递归)的主要内容,如果未能解决你的问题,请参考以下文章

递归 深拷贝

深拷贝(递归)

实现深拷贝的几种方法

利用递归实现深拷贝(常见面试题之一)

利用递归实现深拷贝(常见面试题之一)

js运用递归实现浅拷和深拷贝