深拷貝deepClone的實現

2021-10-23 06:33:26 字數 879 閱讀 9278

// 引用關係的問題 

// ...運算子只能拷貝一層

// ... 第一層的時候是深拷貝,第二次的時候是淺拷貝。

let obj=};

let o=;

obj.name='hello';

console.log(obj,o);

let a=[1,2,4];

let arr=[a];

let newarr=arr.slice(); // 淺拷貝

newarr[0][0]=100;

console.log(arr);

let obj=,f:function(){}};

let o=json.parse(json.stringify(obj));

obj.address.x=200;

console.log(obj,o);

function deepclone(obj,hash=new weakmap()) object.prototype.tostring.call(obj)==[object array]?:{}

if(hash.get(obj)) return hash.get(obj);

let cloneobj=new obj.constructor;

hash.set(obj,cloneobj);

for(let key in obj)

}return cloneobj;

}let obj=}

let d=deepclone(obj);

obj.address.x=200;

console.log(d);

// 如果物件複雜一點 迴圈引用

java實現深轉殖 deep clone

轉殖就是複製乙個物件的複本.但乙個物件中可能有基本資料型別,如 int,long,float 等,也同時含有非基本資料型別如 陣列,集合等 被轉殖得到的物件基本型別的值修改了,原物件的值不會改變.這種適合shadow clone 淺轉殖 但如果你要改變乙個非基本型別的值時,原物件的值卻改變了,比如乙...

C 的深複製(Deep Clone)

public object clone 這裡借助序列化來實現深複製,因此別忘記給需要深複製的物件的類定義上面加上可序列化的標籤 serializable 最近在研究別人的unity rpg 遊戲框架的時候,發現別人程式的深複製又是另一種我沒有見過的寫法。現在提供一下他的思路,有時間我再來研究一下,把...

實現深拷貝

通過遞迴 型別判斷 function deepclone obj 如果obj是正規表示式 instanceof原理 判斷當前元素的 proto 是否有regexp.prototype if obj instanceof regexp 如果obj是日期格式 if obj instanceof date...