js 深拷貝及淺拷貝
阿新 • • 發佈:2018-12-21
一、陣列淺拷貝
在使用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
}
這個方法同樣可以進行陣列的深拷貝