js陣列複製(淺拷貝,深拷貝)
阿新 • • 發佈:2022-05-30
陣列的直接賦值屬於陣列的淺拷貝,JS儲存物件都是存記憶體地址的,所以淺拷貝會導致新陣列和舊陣列共用同一塊記憶體地址,其中一個數組變化,另一個數組也會相應的變化。
陣列內部不含有引用型別,使用slice() 、concat() 和 assign() 方法都屬於陣列的深拷貝,一個數組變化,另一個數組不受影響。
陣列內部含有引用型別,使用slice() 、concat() 和 assign() 方法,非引用型別的值屬於深拷貝,引入型別的值屬於淺拷貝,一個數組變化,另一個也會相應的變化。
淺拷貝:
深拷貝:
方法一:通過JSON.stringify轉化成字串再通過JSON.parse()解析成原陣列
方法二:利用jQuery的$.extend方法。
$.extend( [deep ], target, object1 [, objectN ] );
deep表示是否深拷貝,為true為深拷貝,為false,則為淺拷貝
target Object型別 目標物件,其他物件的成員屬性將被附加到該物件上。
object1 objectN可選。 Object型別 第一個以及第N個被合併的物件。
var newArr = $.extend(true,[],arr)