思路:利用哈希表检测当前对象是否已经拷贝过,是的话则直接返回该对象
let hashMap = new WeakMap()
function deepCloneCicle = (obj,hashMap){
let objClone = Array.isArray(obj) ? [] : {};
if(hashMap.has(obj)) return hashMap.get(obj)
if (obj && typeof obj === "object") {
if(Object.prototype.toString.call(obj) === '[object Array]'){
hashMap.set(obj,objClone)
obj.foreach(item=>{
objClone.push(deepCloneCicle (item,hashMap))
})
} else {
hashMap.set(obj,objClone)
for(let key in origin){
if(obj.hasOwnProperty(key)){
result[key] = deepCloneCircle(obj[key],hashMap)
}
}
}
} else {
return obj
}
return objClone;
}