function deepClone(target, map = new WeakMap) {
if (typeof target ==='object') {
const cloneTarget = Array.isArray(target) ? [] : {}
if(map.has(target)) {
return map.get(target)
}
map.set(target,cloneTarget)
for(key in target) {
cloneTarget[key] = deepClone(target[key], map)
}
return cloneTarget
} else {
return target
}
}