• 对象、数组深拷贝与浅拷贝


    对象深拷贝与浅拷贝

    1、使用JSON方法
    缺点:数据类型为undefined和函数时不能进行拷贝

    let  obj1={
        a:1,
        b:[1,2,3],
        c:undefined,
        fun:()=>{}
    }
    let obj2=JSON.parse(JSON.stringify(obj1))
    obj2.a=222
    obj2.b[1]=666
    console.log(obj1,obj2)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    2、使用Object.assign
    缺点:只能深拷贝一级属性,二级属性会成为浅拷贝

    let  obj1={
        a:1,
        b:[1,2,3],
        c:undefined,
        fun:()=>{}
    }
    let obj2=Object.assign({},obj1)
    obj2.a=222
    obj2.b[1]=666
    console.log(obj1,obj2)  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    3、使用扩展运算符
    缺点:只能深拷贝一级属性,二级属性会成为浅拷贝

    let  obj1={
        a:1,
        b:[1,2,3],
        c:undefined,
        fun:()=>{}
    }
    let obj2={...obj1}
    obj2.a=222
    obj2.b[1]=666
    console.log(obj1,obj2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    4、递归(比较完美解决方案)

    function cloneDeep(data){
        let newData=Array.isArray(data)?[]:{}
        for(let key in data){
            if(data[key]&&typeof data[key]==='object'){
                newData[key]=cloneDeep(data[key])
            }else{
                newData[key]=data[key]
            }
        }
        return newData
    }
    
    let  obj1={
        a:1,
        b:[1,2,3],
        c:undefined,
        fun:()=>{}
    }
    let obj2=cloneDeep(obj1)
    obj2.a=222
    obj2.b[1]=666
    console.log(obj1,obj2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    数组深拷贝与浅拷贝

    1、使用JSON方法
    缺点:数据类型为undefined和函数时不能进行拷贝。
    2、使用Object.assign
    缺点:只能深拷贝一级属性,二级属性会成为浅拷贝。
    3、使用扩展运算符
    缺点:只能深拷贝一级属性,二级属性会成为浅拷贝。
    4、slice、concat
    缺点:只能深拷贝一级属性,二级属性会成为浅拷贝。
    5、递归(比较完美解决方案)

  • 相关阅读:
    【完全二叉树魔法:顺序结构实现堆的奇象】
    [ jquery 选择器 :nth-of-type() ] 选取指定类型(p)父元素下的第几个子元素
    Shell 使用日期或计数器 命名 文件
    A_A02_003 ST-LINK驱动安装
    设计模式-装饰者模式在Java中的使用示例
    Fiddler基础使用
    Linux目录结构+文件类型
    JDBC-API详解-Statement类
    信息论随笔(三)交互信息量
    FusionCharts Suite XT
  • 原文地址:https://blog.csdn.net/qq_43923146/article/details/125959478