> 陣列的深拷貝,兩層
var arr = [[1,2,3],[4,5,6],[7,8,9]];
var arr2 =;
迴圈第一層陣列
for(var i=0,len=arr.length;i)
}console.log(arr2);
//[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(arr===arr2); //
false
> 陣列的淺拷貝,一層
var arr = [1,2,3,4,5,6,7,8];
var arr2 =;
for(var i=0,len=arr.length;i)
console.log(arr2);
console.log(arr===arr2);
> 陣列的深拷貝,三層
var arr = [[1,2,3,[4,5]],[[6,7,8,9]],10,11];
var arr2 =;
//第一層迴圈
for(var i=0,len=arr.length;i)
//第二層for(var k=0,len1=arr[i].length;k)
}else}}
console.log(arr2);
//[1, 2, 3, 4, 5, 6, 7, 8, 9,10,11]
console.log(arr===arr2); //
false
> 陣列的深拷貝,無限層,正則版 1.0
var arr = [[1,2,3,[4,5]],[[6,7,8,9]],10,11,12,13,[14,[15,16,17,[18,[19,[20]]]]]];
var arr2 =;
//先把陣列轉換成字串,然後將字串裡面的刪除
var str = arr.tostring().replace(/\[|\]/,"");
console.log(str);
//1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
//將字串轉換成陣列。
arr2 = str.split(",");
console.log(arr2); //["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"]
console.log(arr===arr2); //false
// 這樣做的話簡單了不少,而且擴充套件性比較強,但是現在出現了個bug,就是我們原本陣列裡面的是數字,現在變成了字串,下面我們來解決一下這個問題。
> 陣列的深拷貝,無限層,正則版 2.0
var arr = [[1,2,3,[4,5]],[[6,7,8,9]],10,11,12,13,[14,[15,16,17,[18,[19,[20]]]]],"a"];
var arr2 =;
//先把陣列轉換成字串,然後將字串裡面的刪除
var str = arr.tostring().replace(/\[|\]/,"");
console.log(str);
//1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
//將字串轉換成陣列。
arr2 = str.split(",");
for(var i=0,len=arr2.length;i)
console.log(arr2);
//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, "a"]
console.log(arr===arr2); //
false
JS陣列和物件實現深拷貝
for 迴圈 for 迴圈 copy function copyfun arr return copyarr let arr1 1 2,3 4 let arr2 copyfun arr1 1,2,3,4 console.log arr2 1,2,3,4 arr2 0 10 console.log a...
JS陣列和物件的淺拷貝和深拷貝
共勉 在許多程式語言中,傳遞引數和賦值是通過值的直接複製或者引用複製完成的。在j ascript中,對於值是直接進行複製還是引用複製在語法上是沒有區別的,完全是根據值的型別來決定的。在j ascript中,簡單值總是通過值的直接複製來進行賦值傳遞的 null,undefined,字串,數字,布林,s...
JS深拷貝陣列和物件
有時候在些js 時不小心直接給陣列和物件直接賦值,可能不會直接產生什麼 但若是遇到了奇怪的問題了,這很有可能就是在拷貝陣列或者物件時時進行淺拷貝,接受者在不知不覺地改變了某些元素的值,從而導致原始值就莫名其妙地被同步修改了 面對這種情況,最好對陣列或者物件進行深拷貝,為了不影響某些元素的丟失 比如某...