let obj1 = {
a: 1
}
let obj2 = {
b: 2
}
obj1.a = obj2
obj2.b = obj1
function deep(obj, m = new Map()) {
let clone;
let Con = obj.constructor;
if (Con) {
switch(Con) {
case RegExp:
clone = new Con()
break
case Date:
clone = new Con()
break
default:
if (m.has(obj)) {
return m.get(obj)
}
clone = obj instanceof Array ? [] : {};
m.set(obj, clone)
}
}
for (let key in obj) {
clone[key] = typeof obj[key] === 'object' ? deep(obj[key], m) : obj[key]
}
return clone
}
console.log(deep(obj1))
深拷贝解决循环引用问题
于 2021-08-04 14:26:18 首次发布