物件陣列的深拷貝和物件的深拷貝

2021-08-20 01:25:35 字數 1081 閱讀 8783

1、對於

普通陣列

(陣列元素為數字或者字串

),深拷貝很簡單,拷貝之後兩個陣列指標指向的儲存位址不同,從而完成深拷貝

var _test = [1,2,3];//原陣列

var _testcopy = 

.concat(_test)

;//拷貝陣列

_testcopy[0]=4;

console.log(_test);// [1,2,3]

console.log(_testcopy);//[4,2,3]

2、對於物件陣列

//形如

var _objarr=[,]

如果還是利用上述的.concat()方法拷貝陣列,則獲取的結果仍然是淺拷貝,改變其一,統統改變,例子:

var _test = [,];//原陣列

var _testcopy = .concat(_test);//拷貝陣列

_testcopy[1].name="girl";

console.log(_test);// [,]

console.log(_testcopy);//[,]

從例子上可以看出,這種對於物件陣列的拷貝,由於陣列內部屬性值為引用物件,因此整個拷貝還是淺拷貝,拷貝之後陣列各個值的指標還是指向相同的儲存位址,

那麼,如何完成此類陣列的深拷貝,根據普通陣列的深拷貝得到啟發,我拷貝乙個字串,不拷貝引用物件,拷貝字串會新闢乙個儲存位址,這樣就切斷了引用物件的指標聯絡,因此,得到的方法為:

var _test = [,];//原陣列

var _testcopy = 

.concat(json.parse(json.stringify(_test)));//拷貝陣列,注意這行的拷貝方法

_testcopy[1].name="girl";

console.log(_test);// [,]

console.log(_testcopy);//[,]

至此,大功告成,一行**完成物件陣列的深拷貝!

3.對物件對深拷貝

var _testcopy = 

json.parse(json.stringify(_test));

陣列和物件的深拷貝

改變原陣列 state const newarray this state.array newarray 0 1 newarray 1 0 0 this state.array 1 0 0 當新的陣列改變時,源陣列也發生了改變,這不是深拷貝 正確的拷貝方式 state 方法一 const newar...

陣列和物件的淺拷貝和深拷貝

前言 對於拷貝需要考慮資料的型別 資料型別分為 基本資料型別和引用型別 基本資料型別是儲存在棧中的簡單資料 常見 string,number,undefined,null,boolean以及es6新定義的symbol 引用型別值是引用型別例項,它是儲存在堆中的乙個物件,引用型別是一中資料結構 常見 ...

物件深拷貝

最近在專案中用到了物件拷貝這一塊,而且用到的是物件的深拷貝。下面就讓我們來看一下關於物件的拷貝 淺拷貝和深拷貝。先看一下深拷貝和淺拷貝的區別 概念 js 中的淺拷貝與深拷貝,只是針對複雜資料型別 object,array 的複製問題。淺拷貝與深拷貝都可以實現在已有物件上再生出乙份的作用。但是物件的例...