1. 程式人生 > >js 深拷貝及淺拷貝

js 深拷貝及淺拷貝

一、陣列淺拷貝
在使用JavaScript對陣列進行操作的時候,我們經常需要將陣列進行備份.

如下程式碼,如果只是簡單才用賦值的方法,那麼我們只要更改其中的任何一個,然後其他的也會跟著改變,這就導致了問題的發生

var arr1 = ["red","yellow","black"];
var arr2 = arr1;
arr2[1] = "green";
console.log("陣列的原始值:" + arr1 );
console.log("陣列的新值:" + arr2);

測試結果發現兩個陣列的值均發生了改變

亦或者用concat:

var arr1 = ["red"
,"yellow","black"]; var arr2 = [].concat(arr1); arr2[1] = "green"; console.log("陣列的原始值:" + arr1 ); console.log("陣列的新值:" + arr2);

此時我們發現兩個陣列的值依舊發生了改變,得知concat也是對於陣列的淺拷貝

一、陣列深拷貝

1.分享一個簡單粗暴的深拷貝方法:!!!

JSON.parse(JSON.stringify(arr))

於是我們在更改其中一個數組值得時候,另一個數組就不會發生改變了~
這個方法的缺點就是有些消耗記憶體

2.

copyObj:function
(list) {
var a = []; for(var i = 0;i<list.length;i++){ let res = {} for (var key in list[i]) { res[key] = list[i][key] } a.push(res) } return a }

這個方法同樣可以進行陣列的深拷貝