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 深拷贝 解决循环引用问题
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 对循环引用解决的方案其实很简单就是使用哈希表其实就是循环检测,我们设置一个数组或者哈希表存储已拷贝过的对象,当检测...
- 首先回顾一下之前实现的深拷贝的代码: 01.循环引用问题 我们看下面这个例子 这段代码运行将会报错,因为循环引用造...
- 目录 1. 背景[#1-%E8%83%8C%E6%99%AF] 2. 简介[#2-%E7%AE%80%E4%BB%...
- 近期使用Realm数据库,被各种事务搞得心烦,查询出来的结果无法直接改。比如如下错误: 使用java深拷贝可解决此...