深拷贝

79 阅读1分钟

基本分析

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