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


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

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

    作者:学辉

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

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

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

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

  • 相关阅读:
    pip install MySQL-python 失败
    E: Unable to correct problems, you have held broken packages
    git 提交顺序
    git 分支
    ubuntu 安装git
    ubuntu 有些软件中不能输入中文
    ubuntu 完全卸载mysql
    Linux中常用操作命令
    基于注解的Spring AOP的配置和使用
    log4j配置详解
  • 原文地址:https://www.cnblogs.com/XH-jing/p/13192995.html
Copyright © 2020-2023  润新知