美文网首页
手写一个深拷贝(深克隆)

手写一个深拷贝(深克隆)

作者: 只跟自己比 | 来源:发表于2020-06-25 21:26 被阅读0次

    1. 首先使用JSON.parse来实现一个深拷贝

    let test = {
        x : 1,
        y : 2,
        z : {
            a : 4,
            b : 5
        }
    }
    // 深拷贝
    let result = JSON.parse(JSON.stringify(test));
    // 改变拷贝后的值
    result.z.a = 40;
    console.log(test);
    console.log(result);
    

    2. 手写实现深拷贝

    function deepClone(obj){
        let cloneObj;
        // 判断当输入的数据是简单数据类型时,直接复制
        if(obj && typeof obj !== 'object'){
            cloneObj = obj;
        }
        // 当输入的数据是对象或者数组时
        else if(obj && typeof obj === 'object'){
            // 检测输入的数据是数组还是对象
            cloneObj = Array.isArray(obj) ? [] : {};
    
            // 变量数据对象
            for(let key in obj){
                // 判断对象是否存在key属性
                if(obj.hasOwnProperty(key)){
                    if(obj[key] && typeof obj[key] === 'object'){
                        // 若当前元素类型为对象时,递归调用
                        cloneObj[key] = deepClone(obj[key]);
                    }
                    // 若当前元素类型为基本数据类型
                    else{
                        cloneObj[key] = obj[key];
                    }
                }
            }
        }
        return cloneObj;
    }
    
    // 测试用例
    deepClone({
      x: 1,
      y: [ 5, 6, 7 ],
      z: {
        a: 0,
        b: 1
      }
    })
    

    测试发现两种效果是一样的,深拷贝完成。

    相关文章

      网友评论

          本文标题:手写一个深拷贝(深克隆)

          本文链接:https://www.haomeiwen.com/subject/pqjefktx.html