js陣列及物件的深拷貝

2021-07-25 21:13:08 字數 943 閱讀 9294

var arr1 = [1, 2, 3];

var arr2 = arr1.slice(0);

arr1[0] = 0;

console.log(arr1);

console.log(arr2);

var arr3 = [1, 2, 3];

var arr4 =arr3.concat();

arr3[0] = 0;

console.log(arr3);

console.log(arr4);

也可以通過自己的方法實現,就是遍歷陣列或物件,返回新陣列或者物件。

var ******copy = function

(o)

return

n; }

else

if (o instanceof

object)

for (var i in

o)

return

n; }

}

那麼如何實現拷貝包含物件或者陣列的這種情況呢?那麼就通過遞迴拷貝來實現。

var deepcopy = function

(o)

return

n; }

else

if (o instanceof

object)

for (var i in

o)

return

n; }

else

}

注意:**中我用instanceof來判斷型別,一定要把o instanceof array 放在 o instanceof object上面,因為如果是陣列的話,instanceof object也返回true。

如此即可。

js陣列,物件深拷貝

無事,封裝了乙個js深拷貝的方法 基本思路 deepcopy data data 可能是陣列也可能是物件 1.判斷data是陣列 物件或者其他資料型別 2.宣告空陣列 或者 空物件 res 3.分別處理 如果陣列元素或物件屬性值不是陣列或物件,空陣列或物件之間接收元素 res.push data i...

js 陣列物件深拷貝

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

js 陣列物件深拷貝

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