陣列淺拷貝的方式

2021-09-21 14:42:52 字數 1187 閱讀 4215

首先

let arr1 = [1, 2, 3];

let arr2 = arr1;

肯定是不行的

記錄一下幾種簡單的方法.

let arr2 = [...arr1];

let arr2 = arr1.concat();

let arr2 = arr1.slice();

順便寫一下自己寫的物件深拷貝的方法,

const test =

}test.loop = test;

function

isobj

(obj)

// weakset防止迴圈引用

function

deepclone

(source,

set=

newweakset

)const obj = array.

isarray

(source)?[

]:;set

.add

(source)

;for

(let key in source)

return obj;

}let new_test =

deepclone

(test)

;test.info.nums.

push(4

);console.

log(new_test)

;// json方式能實現簡單的深拷貝,但是無法解決迴圈引用。

// 在json.stringify的時候很多規則會使最後json.parse出來的物件不太一樣。

// 例如會忽略undefined,總的說轉成json字串的時候,要讓大多數語言理解,就不能存在undefined, nan這種

const person1 =

const person2 =

null

;const json_obj =

, persons:

[person1, person2]

}let obj =

json

.parse

(json

.stringify

(json_obj));

console.

log(obj)

;

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

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

陣列拷貝(深拷貝 淺拷貝)

底層都是使用system.arraycopy object src,int srcpos,object dest,int destpos,int length 方法完成陣列元素拷貝任務的 方法說明 如果newlength original.length,那麼會將原陣列中前newlength個元素拷貝...

警惕陣列的淺拷貝

一 分析 在日常工作中,我們會遇見很多陣列的拷貝和複製的問題,但是在你使用系統提供的api進行編碼的時候,無形中會留下淺拷貝的隱患。二 場景 有這樣乙個例子,第乙個箱子裡面與赤橙黃綠青藍紫7色氣球,現在希望第二個箱子也放入7個氣球,其中最後乙個氣球改為藍色,也就是赤橙黃綠青藍藍七個氣球。1 impo...