我们只需要对每次复杂的数据类型进行深拷贝钱保存其值,若下次再出现了该值,直接截止。
function deepClone(obj) {
//创建一个weakMap
const map = new WeakMap();
map.set(obj, true);
copy = (obj) => {
const newObj = Array.isArray(obj) ? [] : {}
for (let key in obj) {
let value = obj[key];
if (typeof value != 'object') {
newObj[key] = value;
}
else {
//若map已经含有对象
if (map.has(value)) {
newObj[key] = null;
}
else {
//若不含有,则将值设置给map。并递归深拷贝
map.set(value, true);
newObj[key] = copy(value);
}
}
}
return newObj;
}
return copy(obj);
}