基本分析
1、区分基本类型和引用类型
2、考虑循环引用问题
3、注意类型判断时null也为object
代码实现
function deepcopy(obj, map = new Map()){
if(typeof obj === 'object' && obj !== null){
const cloneObj = Array.isArray(obj) ? [] : {};
if(map.get(obj)){
return map.get(obj);
}
map.set(obj, cloneObj);
for(const key in obj){
cloneObj[key] = deepcopy(obj[key], map);
}
return cloneObj;
}else{
return obj;
}
}