js物件深度拷貝

2021-09-02 23:36:59 字數 1051 閱讀 4223

js中物件是引用資料型別,如果我們只是簡單的把物件a通過等號複製給物件b,那麼物件a、b指向的還是同乙個位址,這是改變a,b也會跟著改變。

var a=

var b=a;

b.a=2;

console.log(a.a) //2

這並不是我們想要看到的,一般我們想要的拷貝乙個物件就是想要相互不影響兩個物件。也就是深度拷貝,不止拷貝指向,也一起拷貝值。

分兩種情況,如果物件只有一層,物件裡不包含物件相對簡單,但如果有多層物件相對比較複雜。

es6的擴充套件,其實就是直接把值展開然後複製給新的物件,而不是只複製物件指標

let m=;

n=;n.a=33;

console.log(m.a,n.a) //0,33

運用json物件的自帶的方法stringify把物件轉為轉為字串,複製後在轉為物件

let obj=},

obj2= json.parse(json.stringify(obj));

obj2.b=3;

console.log(obj.b,obj2.b) // 3

封裝乙個轉化函式,物件裡的每一層都取出進行值賦值。

function deepcopyobj(oldobj);

if(oldobj && typeof oldobj=="object" )else

}return newobj

}}

驗證此函式

let obj=,

b:2}

let obj2=deepcopyobj(obj)

obj2.a.a2=808

console.log(obj.a.a2,obj2.a.a2) //2, 808

可以看出結果互不影響。

$.extend( [deep ], target, object1 [, objectn ] );

大概就這幾種了,如果有好的

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

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

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 注意 這...