多層陣列如何遍歷 陣列 物件的深拷貝

2021-10-14 16:19:25 字數 2290 閱讀 1243

一、深拷貝背景

我們需要得到乙份新的data,增刪改查操作都不會影響原始資料。請問如何實現,如下

原因是因為應用型別的賦值,只是修改了指標的指向 。可查mdn資料型別

二、陣列的一層拷貝

slice

concat

[...]

迴圈

var arr = [1,2,3];

var arr1,arr2,arr3;

arr1 = arr.slice(0);

arr2 = arr.concat();

arr3 = [...arr];

arr[0]=100;

console.log(arr,arr1,arr2,arr3);

二.一、物件的一層拷貝object.assign

var obj =

var obj1,obj2;

obj1 = object.assign({},obj);

obj2 = ;

obj.name = '你全家都叫zh'

console.log(obj,obj1,obj2);

三、多層深拷貝思路:非object型別,直接賦值

遞迴目標物件的每一項

// 深拷貝

var array = [,,

];function shencopy(obj)

var res = array.isarray(obj)?:{};

for(let i in obj)

return res

} console.log(shencopy(array));

ps:涉及知識點

1、基本資料型別、應用型別 mdn

2、typeof返回 mdn

3、陣列、物件判斷

var arr = [1,2,3];

var obj =

//方法一 constructor

obj.constructor === object

arr.constructor === array

// 方法二 instanceof

arr instanceof array

obj instanceof object

//方法三 object.prototype.tostring

object.prototype.tostring.call(arr) === "[object array]"

object.prototype.tostring.call(obj) === "[object object]"

// 方法四 array.isarray

array.isarray(arr)

4、object.prototype.tostring.call()引發的思考 檢視

為什麼判斷物件、陣列要用object的tostring 而不用別的tostring?

5、for in / for of

for...in語句以任意順序遍歷乙個物件的除symbol以外的可列舉屬性。for...of語句在可迭代物件(包括arraymapsetstringtypedarray,arguments 物件等等)上建立乙個迭代迴圈,呼叫自定義迭代鉤子,並為每個不同屬性的值執行語句

js遍歷陣列(物件)

例 let arr 1,2,3 for let i 0 iconsole.log arr i 輸出結果 1 2 3 例 let arr 1,2,3 for let i in arr 輸出結果 1 2 3 說明 同普通for迴圈,以key遍歷查詢陣列或物件 例 let arr 1,2,3 for le...

遍歷陣列,遍歷物件的方法

遍歷陣列 方法1 for 迴圈 使用臨時變數將陣列長度快取起來,避免重複獲取陣列長度 for var i 0,leng arr.length i leng i 方法2 foreach迴圈 遍歷陣列中的每一項,沒有返回值,對原陣列沒有影響,不支援ie arr.foreach item,index,ar...

javascript實現陣列或物件的深拷貝

第一 簡單粗暴 let arr 1,let copyarr json.parse json.stringify arr console.log copyarr 1,arr 1 a 3 console.log copyarr 1,copyarr 1 a 5 console.log arr 1,可以看出...