如何對數組進行深拷貝
我們一般常見的一個數組賦值給另外一個數組的方法,數據賦值的同時,引用地址也賦值過去了,一個數組改變,另外一個數組也改變。
如果我們想要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);
