用擴充套件運算子深拷貝陣列:
直接貼上**:
let arr =[1
,2,3
,4,5
,6];
let arr1 =
[...arr]
; arr1.
push(7
);console.
log(arr)
;//[1, 2, 3, 4, 5, 6]
console.
log(arr1)
;//[1, 2, 3, 4, 5, 6, 7]
當陣列是一維陣列時,擴充套件運算子可以進行完全深拷貝,改變拷貝後陣列的值並不會影響拷貝源的值。
但是,當陣列為多維時:
let arr =[1
,2,3
,4,5
,6,[
1,2,
3]];
let arr1 =
[...arr]
; arr1.
push(7
);arr1[arr1.length -2]
[0]=
100;
console.
log(arr)
;//[1, 2, 3, 4, 5, 6,[100, 2, 3]]
console.
log(arr1)
;//[1, 2, 3, 4, 5, 6, [100, 2, 3],7]
物件也是相同的道理
let cloneobj=
json
.parse
(json
.stringify
(obj)
);
第二種
unction deepclone
(obj)
;for
(key in obj)
else}}
}return objclone;
}
方法一:迴圈陣列每個物件都複製(其實還是物件複製)
for
(let i=
0;i), res.data[i]))
}
理解「淺拷貝」和「深拷貝」
淺拷貝 將原物件 原陣列 的 引用 直接賦給新物件 新陣列 新物件 新陣列 是原物件 原陣列 的乙個引用。如果改變這個新物件 新陣列 原物件 原陣列 就會改變。深拷貝 將原物件的各項屬性的 值 陣列的所有元素 都拷貝給新物件 新陣列 是拷貝的 值 而不是 引用 為什麼要使用深拷貝?希望改變新物件 新...
深拷貝與淺拷貝的區別和理解
深拷使用 總結一般拷貝的使用場景主要是,將物件或者陣列賦值到新的變數中。但是這樣就會出現乙個問題,當改變新的物件或陣列時,源陣列或物件也會發生改變,那麼這個時候要根據實際情況使用深度拷貝,還是淺拷貝,這裡不能一股腦的使用深度拷貝,畢竟深度拷貝對於效能的消耗還是蠻大的 對於像foreach map f...
深拷貝和淺拷貝的理解
為什麼要使用深拷貝和淺拷貝?當你想複製乙個物件時,一般做法是obj2 obj1,但是當你改動obj2的時候,會影響到obj1,而obj1也會影響到obj2,所以需要深拷貝和淺拷貝來解決物件的直接賦值仍然 連線 的問題。淺拷貝 複製乙份引用,讓所有引用物件指向乙份資料,並且可以修改這份資料,即只對指標...