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 } }