function deepCopy(obj) {
// hash表,記錄所有的對象的引用關系
let map = new WeakMap();
function dp(obj) {
let result = null;
let keys = Object.keys(obj);
let key = null,
temp = null,
existobj = null;
existobj = map.get(obj);
//如果這個對象已經被記錄則直接返回
if (existobj) {
return existobj;
}
result = {}
map.set(obj, result);
for (let i = 0, len = keys.length; i < len; i++) {
key = keys[i];
temp = obj[key];
if (temp && typeof temp === 'object') {
result[key] = dp(temp);
} else {
result[key] = temp;
}
}
return result;
}
return dp(obj);
}
const obj1 = {
x: 1
}
// obj1.z = obj1;
const obj2 = {
x: 2
}
obj1.next = obj2;
obj2.next = obj1;
const obj3 = deepCopy(obj1);
console.log(obj3)
js 深拷貝 解決循環(huán)引用問題
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 對循環(huán)引用解決的方案其實很簡單就是使用哈希表其實就是循環(huán)檢測,我們設置一個數組或者哈希表存儲已拷貝過的對象,當檢測...
- 首先回顧一下之前實現的深拷貝的代碼: 01.循環(huán)引用問題 我們看下面這個例子 這段代碼運行將會報錯,因為循環(huán)引用造...
- 目錄 1. 背景[#1-%E8%83%8C%E6%99%AF] 2. 簡介[#2-%E7%AE%80%E4%BB%...
- 近期使用Realm數據庫,被各種事務搞得心煩,查詢出來的結果無法直接改。比如如下錯誤: 使用java深拷貝可解決此...