數組的深拷貝和淺拷貝


數組淺拷貝:

var arr1 = [1, 2, 3, 4];
var arr2 = arr1; 
arr1[0] = 6;                //數組是用堆去保存的,相等的時候只是把存放的地址拷貝過去了,兩個指向了同一個地址,所以在改變其中一個的值,其他的也跟着改變了
console.log(arr2[0]);       //輸出結果為6
console.log(arr[1]);        //[6, 2, 3, 4]
console.log(arr[2]);        //[6, 2, 3, 4]

 

數組深拷貝:

1)、slice方法:

var arr1 = [1, 2, 3, 4];
var arr2 = arr1.slice(0);   //從0開始到末尾截取數組,然后返回一個新的數組
arr1[0] = 6; 
console.log(arr2[0]);       //輸出結果為1
console.log(arr[1]);        //[6, 2, 3, 4]
console.log(arr[2]);        //[1, 2, 3, 4]

2)、concat方法:

var arr1 = [1, 2, 3, 4];
var arr2 = arr1.concat();   //連接數組,如果連接的是一個空,那么也是返回了新的本身的數組
arr1[0] = 6; 
console.log(arr2[0]);       //輸出結果為1
console.log(arr[1]);        //[6, 2, 3, 4]
console.log(arr[2]);        //[1, 2, 3, 4]

3)、map方法:

var arr1 = [1, 2, 3, 4]; 
var arr2 = arr1.map(function(value){
     return value;
})                          //使用map方法遍歷數組然后返回新的數組,里面的值不變
arr1[0] = 6;   
console.log(arr2[0])        //輸出結果為1
console.log(arr1);          //[6, 2, 3, 4]
console.log(arr2);          //[1, 2, 3, 4]

4)、ES6語法:

var arr1 = [1, 2, 3, 4];
var [ ...arr2 ] = arr1;     //ES6擴展運算符實現數組的深拷貝
arr1[0] = 6; 
console.log(arr2[0]);       //輸出結果為1
console.log(arr[1]);        //[6, 2, 3, 4]
console.log(arr[2]);        //[1, 2, 3, 4]

 


免責聲明!

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



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