數組的拷貝


如何對數組進行深拷貝

我們一般常見的一個數組賦值給另外一個數組的方法,數據賦值的同時,引用地址也賦值過去了,一個數組改變,另外一個數組也改變。

如果我們想要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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM