js陣列,物件深拷貝

2021-10-01 07:53:34 字數 745 閱讀 9101

無事,封裝了乙個js深拷貝的方法

基本思路:

deepcopy(data)

data 可能是陣列也可能是物件

1.判斷data是陣列 物件或者其他資料型別

2.宣告空陣列 或者 空物件 res

3.分別處理

如果陣列元素或物件屬性值不是陣列或物件,空陣列或物件之間接收元素

res.push(data[i])

res[x] = data[x]

如果陣列元素或物件屬性值是陣列或物件,則可以再一次呼叫deepcopy

res.push(deepcopy(data[i]))

res[x] = deepcopy(data[x])

4.返回深拷貝資料 res

具體程式:

var arr =[1

,2,3

,,undefined]

;// var arr = ],hobby:'games'}

console.

log(

deepcopy

(arr)

)function

deepcopy

(data)

else}}

else

if(data.constructor === object)

for(x in data)

else}}

else

return res;

}

js 陣列物件深拷貝

如何區分深拷貝與淺拷貝,簡單點來說,就是假設b複製了a,當修改a時,看b是否會發生變化,如果b也跟著變了,說明這是淺拷貝,拿人手短,如果b沒變,那就是深拷貝,自食其力 我們希望在改變新的陣列 物件 的時候,不改變原陣列 物件 我們在使用深拷貝的時候,一定要弄清楚我們對深拷貝的要求程度 是僅 深 拷貝...

js 陣列物件深拷貝

結論 物件的拷貝不能採用直接賦值的方式。踩過的坑如下 formdata本來是父元件傳過來的,但是我不想直接用,於是我直接賦值給乙個formdatacopy的物件。但是詭異的事情發生了,就是在我填寫自己的表單元件的時候,一旦表單的資料發生的變化時,本來是formdatacopy的值發生變化,但是 fo...

js 陣列物件深拷貝

結論 物件的拷貝不能採用直接賦值的方式。踩過的坑如下 formdata本來是父元件傳過來的,但是我不想直接用,於是我直接賦值給乙個formdatacopy的物件。但是詭異的事情發生了,就是在我填寫自己的表單元件的時候,一旦表單的資料發生的變化時,本來是formdatacopy的值發生變化,但是 fo...