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


    对象深拷贝与浅拷贝

    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、递归(比较完美解决方案)

  • 相关阅读:
    vue3 自定义组件 v-model 原理解析
    gpu cuda 矩阵乘法
    内网离线 k3s Rancher 高可用安装部署流程
    CF1721D Maximum AND
    JDK17 New Feature
    2022上海省赛(A,E,G,H,M,N)
    JDBC-Statement+ResultSet介绍
    2023华为杯数学建模研赛思路分享——最全版本E题技术文档深度解析已出
    关于go语言的那点事
    程序员的快乐如此简单
  • 原文地址:https://blog.csdn.net/qq_43923146/article/details/125959478