题解 | #深拷贝#

深拷贝

https://www.nowcoder.com/practice/70ca77b52d424ced8ebb348cd77c1dc5

const _completeDeepClone = (obj, visited = new WeakMap()) => {
    // 补全代码
    // 处理基本类型
    if (obj === null || typeof obj !== 'object') {
        return obj;
    }

    // 处理循环引用
    if (visited.has(obj)) {
        return visited.get(obj);
    }

    // 处理日期类型
    if (obj instanceof Date) {
        return new Date(obj);
    }

    // 处理正则表达式类型
    if (obj instanceof RegExp) {
        return new RegExp(obj);
    }

    // 处理函数类型
    if (typeof obj === 'function') {
        return obj;
    }

    // 处理数组类型
    if (Array.isArray(obj)) {
        const copyArray = [];
        visited.set(obj, copyArray);
        for (let i = 0; i < obj.length; i++) {
            copyArray[i] = _completeDeepClone(obj[i], visited);
        }
        return copyArray;
    }

    // 处理普通对象类型
    const copyObj = {};
    visited.set(obj, copyObj);
    for (const key in obj) {
        if (obj.hasOwnProperty(key)) {
            copyObj[key] = _completeDeepClone(obj[key], visited);
        }
    }

    return copyObj;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
09-27 10:54
重庆大学 C++
人已微死:致敬传奇耐测王。
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务