如何在 JavaScript 中深拷贝数组

发布于 2023-03-20 23:00:13 字数 1600 浏览 63 评论 0

在 JavaScript 中复制对象时,可以创建 深拷贝或浅拷贝 。深拷贝的好处是它复制嵌套的对象,所以你可以修改克隆的数组而不影响原始数组。 这样的库 唯一的问题是您要么需要像Lodash ,要么需要结合使用 JSON.stringify() 和 JSON.parse()

Lodash

Lodash 的 cloneDeep(value) 函数将为您深度复制数组。

const objects = [{ 'a': 1 }, { 'b': 2 }];

const deep = _.cloneDeep(objects);
deep[0] === objects[0]; // returns false

deep[0].a = 2;
objects[0].a; // 1, didn't change

Lodash 的 cloneDeep() 在处理边缘情况方面做得很好,比如克隆日期:

const objects = [{ createdAt: new Date('2017-06-01') }];

const deep = _.cloneDeep(objects);

deep[0].createdAt === objects[0].createdAt; // false
deep[0].createdAt instanceof Date; // true
objects[0].createdAt instanceof Date; // true

JSON.stringify() 和 JSON.parse()

这种功能组合确实可以完成工作,但并不完美。

const obj = { name: { first: 'Jean-Luc', last: 'Picard' } };
const copy = JSON.parse(JSON.stringify(obj));

copy.name.first = 'Johnny';
obj.name.first; // Jean-Luc

注意: 此方法仅适用于包含以下 JavaScript 原语的 对象:

  • 数字
  • 字符串
  • 布尔值
  • 对象
  • 数组

如果您要复制的对象包含 date,例如,它可能会在以后导致一些问题:

const obj = { date: new Date() };
const copy = JSON.parse(JSON.stringify(obj));

obj.date instanceof Date; // true
copy.date.instanceof Date; // false, date is now a string

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

夏了南城

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

6118422078

文章 0 评论 0

Bonjour°[大白

文章 0 评论 0

別甾虛僞

文章 0 评论 0

qq_FynBW0

文章 0 评论 0

浅笑依然

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文