陣列和物件的深拷貝

2021-10-03 23:32:09 字數 1395 閱讀 2502

改變原陣列

state =

const newarray =

this

.state.array

newarray[0]

='1'

newarray // ['1', '0', '0']

this

.state.array // ['1', '0', '0']

當新的陣列改變時,源陣列也發生了改變,這不是深拷貝

正確的拷貝方式

state =

// 方法一

const newarray =

this

.state.array.

slice()

// 不修改原來的陣列

// 方法二

const newarray =

[...

this

.state.array]

// 不修改原來的陣列

newarray[0]

='1'

newarray // ['1', '0', '0']

this

.state.array // ['0', '0', '0']

push()方法:使用會改變原陣列

concat()方法:使用不會改變原陣列

object.assign()

用於將所有可列舉屬性的值從乙個或多個源物件中複製到目標物件, 它將返回目標物件

const obj =

const obj2 = object.

assign

(, obj)

// obj2.a =

2cosnole.

log(obj, obj2)

//

結構賦值
let obj =

let obj2 =

obj2.a =

2console.

log(obj, obj2)

//

json.stringifyjson.parse()
let obj =

let obj2 =

json

.parse

(json

.stringify

(obj)

)obj2.a =

2console.

log(obj, obj2)

//

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

1 對於 普通陣列 陣列元素為數字或者字串 深拷貝很簡單,拷貝之後兩個陣列指標指向的儲存位址不同,從而完成深拷貝 var test 1,2,3 原陣列 var testcopy concat test 拷貝陣列 testcopy 0 4 console.log test 1,2,3 console....

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

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

陣列,物件的拷貝方式(深拷貝和淺拷貝)

引言typeof 檢測arr或者物件的時候只會返回 object 引用資料型別 一般來說就是函式 物件 陣列 1.遞迴方式 function isobject obj var deepclone function obj return num 最後返回num console.log deepclon...