js深度物件合併,深度賦值 拷貝

2021-10-16 17:42:25 字數 1220 閱讀 3730

平時我們在處理純粹物件(鍵值對物件/json)時,如果使用object.assign或者物件解構賦值,只會合併第一層的資料,而當合併巢狀物件,將會直接覆蓋掉前面被合併物件裡的資料,這是因為object.assign和物件解構賦值都是只有第一層屬於深拷貝,而往下都是淺拷貝,例如:

var obj1 =};

var obj2 =};

var obj3 =

;// object.assign

object.

assign

(obj3, obj1, obj2)

;console.

log(obj3)

;// }

// 解構

obj3 =

;console.

log(obj3)

;// }

可以看到,obj1裡面的a屬性被覆蓋了,直接替換成了最後乙個物件(obj2)裡的a,即: 。

// 判斷是否是純粹物件

const

isplainobject

= obj =>

// 主函式

function

assigndeep()

for(

let key in item)

else}}

else

if(item instanceof

array

)else})

}})return result;

}

var obj1 =};

var obj2 =};

var obj3 =

;// 呼叫assigndeep方法

assigndeep

(obj3, obj1, obj2)

;console.

log(obj3)

;// }

var obj4 =};

var obj5 =};

assigndeep

(obj4,obj5)

;// };

var obj6 =[1

,2,3

];var obj7 =[4

,5];

assigndeep

(obj6, obj7)

;// [4,5,3]

assigndeep()方法可以解決多數常用資料型別(包括陣列)的物件的賦值合併操作

js物件深度拷貝

js中物件是引用資料型別,如果我們只是簡單的把物件a通過等號複製給物件b,那麼物件a b指向的還是同乙個位址,這是改變a,b也會跟著改變。var a var b a b.a 2 console.log a.a 2這並不是我們想要看到的,一般我們想要的拷貝乙個物件就是想要相互不影響兩個物件。也就是深度...

js進行物件深度拷貝deep clone

推薦 操作新穎,逆向思維 轉成json字串 在將字串轉為物件 obj1 let obj3 json.parse json.stringify obj1 obj1.a 4 obj1.b.c 4 log json.stringify obj3 慎用lodash的clonedeep函式 文中還是推薦方法一...

js實現深度拷貝

js實現拷貝,使用普通賦值物件,在操作其中乙個物件值的時候,另乙個也會更改,不符合需求 因此引入深度拷貝,以下為實現深度拷貝的幾種法 合併多個物件 var target var source1 var source2 object.assign target,source1,source2 注意 這...