function deepClone(target, map = new Map()) {
if (map.get(target)) {
return map.get(target)
}
if (typeof target === 'object' && target !== null) {
const copyTarget = Array.isArray(target) ? [] : {}
map.set(target, copyTarget)
for (key in target) {
if (target.hasOwnProperty(key)) {
copyTarget[key] = deepClone(target[key], map)
}
}
return copyTarget
} else {
return target
}
}
const obj = {
a: [1,2,3],
b: 4,
c: {
d: {
e: 5
}
}
}
const copyObj = deepClone(obj)
console.log(copyObj)