zoukankan      html  css  js  c++  java
  • 手写一个深拷贝(深克隆)

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

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

    作者:学辉

    -------------------------------------------

    个性签名: 没有好看的皮囊,但有有趣的灵魂,技术没有止境!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

  • 相关阅读:
    作业11
    作业10总结
    作业10
    作业9总结
    作业9
    作业8总结
    作业8
    实验7总结
    实验6总结
    史航第12次作业&总结
  • 原文地址:https://www.cnblogs.com/XH-jing/p/13192995.html
Copyright © 2011-2022 走看看