js复制对象(深度拷贝,深拷贝)

 
更多

js复制对象(深度拷贝,深拷贝)。

在 JavaScript 中,深度复制(deep copy)一个对象意味着创建一个新对象,其中所有的嵌套对象和数组都被递归复制,而不是简单地复制它们的引用。这里有几种常见的实现深度复制的方法:

1. 使用 JSON.parse 和 JSON.stringify

这是最简单的方法,但有一些限制,例如它不能复制函数、undefined、Date 对象、RegExp 对象等。

const original = { a: 1, b: { c: 2 } };
const copy = JSON.parse(JSON.stringify(original));

console.log(copy); // { a: 1, b: { c: 2 } }

2. 使用递归手动复制

可以通过递归函数手动深度复制对象,这样可以处理更复杂的情况,包括数组、对象嵌套等。

function deepCopy(obj) {
    if (obj === null || typeof obj !== 'object') {
        return obj;
    }

    if (Array.isArray(obj)) {
        const arrCopy = [];
        for (let i = 0; i < obj.length; i++) {
            arrCopy[i] = deepCopy(obj[i]);
        }
        return arrCopy;
    }

    const objCopy = {};
    for (const key in obj) {
        if (obj.hasOwnProperty(key)) {
            objCopy[key] = deepCopy(obj[key]);
        }
    }

    return objCopy;
}

const original = { a: 1, b: { c: 2 }, d: [3, 4] };
const copy = deepCopy(original);

console.log(copy); // { a: 1, b: { c: 2 }, d: [3, 4] }

3. 使用 lodash 库的 cloneDeep 方法

lodash 是一个强大的 JavaScript 工具库,它的 cloneDeep 方法可以方便地进行深度复制。

const _ = require('lodash');

const original = { a: 1, b: { c: 2 }, d: [3, 4] };
const copy = _.cloneDeep(original);

console.log(copy); // { a: 1, b: { c: 2 }, d: [3, 4] }

4. 使用 structuredClone 方法

structuredClone 是现代浏览器中内置的 API,用于深度复制对象,它能够处理许多数据类型,例如 Date 对象、RegExp 对象、Map、Set 等。

const original = { a: 1, b: { c: 2 }, d: new Date() };
const copy = structuredClone(original);

console.log(copy); // { a: 1, b: { c: 2 }, d: [Date object] }

总结

对于简单对象,JSON.parse 和 JSON.stringify 是一个简单的解决方案。

对于包含特殊数据类型(如 Date、RegExp、Map 等)的对象,推荐使用 structuredClone,或者使用 lodash 的 cloneDeep 方法。

手动递归复制提供了完全的控制权,但需要编写更多的代码。

打赏

本文固定链接: https://www.cxy163.net/archives/2930 | 绝缘体

该日志由 绝缘体.. 于 2024年08月30日 发表在 未分类 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: js复制对象(深度拷贝,深拷贝) | 绝缘体
关键字: , , , ,

js复制对象(深度拷贝,深拷贝):等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter