数组的拷贝

如何对数组进行深拷贝

我们一般常见的一个数组赋值给另外一个数组的方法,数据赋值的同时,引用地址也赋值过去了,一个数组改变,另外一个数组也改变。

如果我们想要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);
原文地址:https://www.cnblogs.com/yesu/p/8657438.html