1. 程式人生 > 其它 >物件深拷貝的方法

物件深拷貝的方法

1.

//第一種解構賦值缺點:只能拷貝物件的第一層,如果物件中屬性也是物件的話,沒有辦法進行深度的拷貝 varobj={ username:"張三", age:18 } varobj1={ ...obj } 改變obj的值,不會影響obj1的值 2. //第二種物件的合併 varobj2=Object.assign({},obj); console.log(obj2); 3. /第三種JSON暴力轉換 varobj3=JSON.parse(JSON.stringify(obj)); console.log(obj3); 當物件中還包含物件時,怎麼實現深拷貝 (1)定義並初始化一個物件 varperson={ name1:"張三", age1:18, person1:{ name2:"李四", age2:21, person2:{ name2:"王五", age2:12, } } } (2)如果對person物件進行遍歷,將person的屬性全部給一個新的物件,那麼當最外面的一層person物件中的屬性的屬性值變化時,不會影響到裡面的值。 下面兩行console.log(obj);不會有變化 varobj={}; for(keyinperson){ obj[key]=person[key] } console.log(obj); person.name1="張三改"; console.log(obj);

(3)如果對第二層物件person1進行更改或者是第三層物件person2進行更改,那麼obj中也會改變

person.person1.name2="李四改"; console.log(obj); person.person1.name2="李四改"; console.log(obj); person.person1.person2.name2="王五改"; console.log(obj);

(4)怎麼實現多層物件深拷貝

functiondeepClone(obj,newObj){ varnewObj=newObj||{}; for(letkeyinobj){ if(typeofobj[key]=='object'){ newObj[key]=(obj[key].constructor===Array)?[]:{} deepClone(obj[key],newObj[key]); }else{ newObj[key]=obj[key] } } returnnewObj; } console.log(deepClone(person,{}));