const deepClone = (target, map = new WeakMap) => {
if(typeof target === 'object'){{
const cloneTarget = Array.isArray(target)?[]:{}
if(map.get(target)){
return target
}
map.set(target,cloneTarget)
for( const key in target){
cloneTarget[key] = deepClone(target[key], map)
}
return cloneTarget
}}else{
return target
}
}
const target = {
field1: 1,
field2: undefined,
field3: {
child: 'child'
},
field4: [2, 4, 8]
};
target.target = target;
let cloneTarget = deepClone(target)
cloneTarget.field1 = '33'
console.log(target)
console.log(cloneTarget)