JS实现的深拷贝和浅拷贝

      发布在:前端技术      评论:0 条评论

在JavaScript中,如果你希望防止原始数据在被修改后随之改变,你可以创建一个新的副本,然后在这个副本上进行修改。这可以通过各种方式实现,包括浅拷贝和深拷贝。

浅拷贝:

浅拷贝仅复制对象的顶层属性。如果对象的属性是引用类型(例如数组或另一个对象),则这些属性将被复制引用,而不是实际的数据。

function shallowCopy(obj) {

    return JSON.parse(JSON.stringify(obj));

}

深拷贝:

深拷贝不仅复制对象的顶层属性,还会复制对象内部的子对象和数组。这样,原始对象和拷贝的对象的所有属性都是独立的。

function deepCopy(obj) {

    let copy = Array.isArray(obj) ? [] : {};

    for (let i in obj) {

        if (obj.hasOwnProperty(i)) {

            if (typeof obj[i] === 'object' && obj[i] !== null) {

                copy[i] = deepCopy(obj[i]); // 递归拷贝对象内的对象

            } else {

                copy[i] = obj[i]; // 拷贝原始值

            }

        }

    }

    return copy;

}

这两种方法都可以实现数据的复制,但需要注意的是,深拷贝比浅拷贝更复杂,并且可能需要进行递归操作。另外,如果数据结构非常复杂,或者包含循环引用,那么实现深拷贝可能会更复杂。


相关文章
热门推荐