数组的拷贝
如何对数组进行深拷贝
我们一般常见的一个数组赋值给另外一个数组的方法,数据赋值的同时,引用地址也赋值过去了,一个数组改变,另外一个数组也改变。
如果我们想要a数组赋值给b数组,并且他们之间的数据互不影响,这个时候就会接触到以下的浅拷贝数组的方法
首先最常用的两种方法 slice()和contact( )方法
var arr1=["1","2","3"],arr2; arr2=arr1.slice(0); arr1[0]=0; //改变arr1第一个元素 alert("arr2[0]:"+arr2[0]); //不影响arr2 var arr3=["1","2","3"],arr4; arr4=arr3.concat(); arr3[0]= 0; //改变arr3第一个元素 alert("arr4[0]:"+arr4[0]); //不影响arr4
注意: 浅拷贝只适用于简单的一位数组
如果是二维数组或者带对象的数组,这两种方法则不起作用
如果是上述的这种数组的拷贝,我们就会用到深拷贝,深拷贝的实现方法有很多种,比如递归方法等,但是最简单的一种方法就是利用jq提供的extend的方法
var arr1 = [1, 2, [3, 4], {a: 5, b: 6}, 7], arr2 = $.extend(true, [], arr1); console.log(arr1, arr2); arr2[1] = 10; console.log(arr1, arr2); var arr1 = [1, 2, [3, 4], {a: 5, b: 6}, 7], arr2 = $.extend(true, [], arr1); console.log(arr1, arr2); arr2[1] = 10; console.log(arr1, arr2);