深拷贝(递归)

Booo Booo     2022-10-09     718

关键词:

使用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
 

 

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

浅拷贝和深拷贝的区别:浅拷贝:只是将数据中所有的数据引用下来,依旧指向同一个存放地址,拷贝之后的数据修改之后,也会影响到原数据的中的对象数据深拷贝:将数据中所有的数据拷贝下来,对拷贝之后的数据进行修改... 查看详情

javascript递归简单实现个对象深拷贝(代码片段)

JavaScript中对象的深拷贝来说一直都算比较恶心毕竟没有什么api能直接全拷贝了得自己便利写 最近在项目中需要深拷贝自己简单封了个方法 话不多说直接上码1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">... 查看详情

javascript的一个深拷贝的例子——递归函数的实现

 今天学到了JS的关于深拷贝和浅拷贝的例子,有些体会。 在JavaScript中,变量的拷贝分为两种,一种是值拷贝,一种是内存地址拷贝,意思是当赋值给变量的只是一个简单的基本数值时,变量与变量之间的储存空间是相互... 查看详情

深拷贝

方案一functiondeepCopy(obj,cache=[])//如果为普通数据类型,则直接返回,完成拷贝if(objnull||typeofobj!=="object")returnobj//cache用来储存原始值和对应拷贝数据,在递归调用deep 查看详情

记录-实现深拷贝的四种方式

...上总结出来的一些知识,希望对大家有所帮助概念介绍深拷贝:在堆内存中重新开辟一个存储空间,完全克隆一个一模一样的对象浅拷贝:不在堆内存中重新开辟空间,只复制栈内存中的引用地址。本质上两个对象(数组)依然... 查看详情

深拷贝浅拷贝(代码片段)

  深拷贝、浅拷贝1.浅拷贝浅拷贝是对于一个对象的顶层拷贝通俗的理解是:拷贝了引用,并没有拷贝内容   2.深拷贝深拷贝是对于一个对象所有层次的拷贝(递归) 进一步理解拷贝 3.拷贝的其他方式浅拷... 查看详情

深拷贝实现的方法(代码片段)

1.通过递归去赋值所有层级属性functiondeepClone(obj)letobjClone=Array.isArray(obj)?[]:;if(obj&&typeofobj==="object")for(keyinobj)if(obj.hasOwnProperty(key))//判断ojb子元素是否为对象,如果是,递归复制if(obj[key]&& 查看详情

深拷贝浅拷贝

...B复制了A,当修改A时B是否会发生变化如果B发生了变化-浅拷贝B不发生变化-深拷贝 深拷贝的实现方法1.浅拷贝+递归2.判断类型JSON.parse(JSON转为对象)JSON.stringify(obj)(对象转JSON)  varobj3=JSON.parse(JSON.stringify(obj)) 参考:htt... 查看详情

用原生js实现深拷贝(代码片段)

用原生JS实现深拷贝浅拷贝和深拷贝的概念这里不做赘述。深拷贝实现方法有两种一种是通过JSON.parse(JSON.Stringify(arr));另一种则是通过递归,本文主要讲述通过递归实现JS的深拷贝。弊端:都不能实现对于内部函数的拷贝... 查看详情

实现浅拷贝与深拷贝(代码片段)

实现浅拷贝与深拷贝Js包含基本数据类型与引用数据类型两种不同的数据类型的值,深拷贝与浅拷贝的概念只存在于引用数据类型。对于引用类型,浅拷贝是拷贝了指向这个对象堆内存的指针,是拷贝了对原对象引用,深拷贝是... 查看详情

深拷贝和浅拷贝区别是什么

浅拷贝浅拷贝是会将对象的每个属性进行依次复制,但是当对象的属性值是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化。Object.assign、扩展运算符…、Array.prototype.slice()、Array.prototype.concat()等深拷贝深... 查看详情

js的深拷贝和浅拷贝

浅拷贝和深拷贝都是对于复杂对象Object和Array来说的,对于直接量来说,复制的是值,也就不存在深浅的区别.对于对象来说,浅拷贝就是将自身的属性复制到另外一个空对象上,深拷贝则更近一步,它会将对象的对象属性进行递归拷贝,... 查看详情

javascript浅拷贝与深拷贝(代码片段)

浅拷贝与深拷贝1. 什么是浅拷贝,深拷贝?2. 常用的浅拷贝方法2.1)'='赋值2.2)扩展运算符2.3)Object.assign()2.4)for...in3. 常用的深拷贝方法3.1)递归3.2)JSON做字符串转换1. 什么是浅拷贝,深拷贝?浅拷... 查看详情

深拷贝和浅拷贝的异同以及实现方式

参考技术A相同点:深拷贝和浅拷贝都是用于对复杂数据类型进行复制。差异:其区别在于深拷贝是对原数据进行递归复制,并存到一个新地址,从而使新老数据互不影响。而浅拷贝只是对原数据的地址进行拷贝,从而会使新老... 查看详情

深拷贝与浅拷贝(代码片段)

  浅拷贝  复制一层对象的属性,并不包括对象里面的为引用类型的数据,当改变拷贝的对象里面的引用类型时,源对象也会改变。  深拷贝  重新开辟一个内存空间,需要递归拷贝对象里的引用,直到子属性都为基本... 查看详情

js中的深拷贝和浅拷贝

...一层对象的属性,而深复制则递归复制了所有层级。深浅拷贝 的主要区别就是:复制的是引用(地址)还是复制的是实例。所谓 深浅拷贝:对于仅仅是复制了引用(地址),换句话说,复制了之后,原来的变量和新的变量... 查看详情

pyhon的浅拷贝与深拷贝

1、赋值:简单地拷贝对象的引用,两个对象的id相同。2、浅拷贝:创建一个新的组合对象,这个新对象与原对象共享内存中的子对象。3、深拷贝:创建一个新的组合对象,同时递归地拷贝所有子对象,新的组合对象与原对象没... 查看详情

深拷贝与浅拷贝复习(代码片段)

引用:https://www.cnblogs.com/echolun/p/7889848.html三种深拷贝对象的方法递归拷贝key值functiondeepClone(obj)letobjClone=Array.isArray(obj)?[]:;if(obj&&typeofobj==="object")for(keyinobj)if(obj.hasOwnProperty(key))//判断ojb子元素是否为对象,如果是,递归复制i... 查看详情