JS深拷贝案例介绍两种方法

2023-12-13 15:46:30

什么是深拷贝?
深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象
接下来我们使用深拷贝实现let a=[1,2,3,4],复制给let b = [];
这里我介绍两种方法

第一种方法

    // 到时候我们传值到函数里
    function deepClone(obj) {
        // 我们先判断声明一个对象或数组 如果是数组就是[] 如果不是数组就是{}
        let objClone = Array.isArray(obj) ? [] : {}
        // 判断obj是否是对象 []也是对象object
        if (obj && typeof obj === "object") {
            // 我们就循环对象或者数组
            for (key in obj) {
                // 判断obj是否存在key
                if (obj.hasOwnProperty(key)) {
                    // 判断obj[key]是否为对象 如果是递归复制
                    if (obj[key] && typeof obj[key] === "object") {
                        objClone[key] = deepClone(obj[key])
                    } else {
                        // 如果不是对象 简单复制
                        objClone[key] = obj[key]
                    }
                }
            }
        }
        // 返回objClone
        return objClone
    }
    let a = [1, 2, 3, 4]
    b = deepClone(a)
    a[0] = 2
    console.log(a) //[2, 2, 3, 4]
    console.log(b) //[1, 2, 3, 4]

第二种方法

    function deepClone(obj) {
        let _obj = JSON.stringify(obj);
        let objClone = JSON.parse(_obj);
        return objClone
    }
    let a = [1, 2, 3, 4]
    b = deepClone(a)
    a[0] = 2
    console.log(a) //[2, 2, 3, 4]
    console.log(b) //[1, 2, 3, 4]

感谢大家的阅读,如有不对的地方,可以向我提出,感谢大家!

文章来源:https://blog.csdn.net/m0_74577714/article/details/134969585
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。