如何在 JavaScript 中深拷贝数组

发布于 2023-03-20 23:00:13 字数 1600 浏览 69 评论 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 评论
23 人气
更多

推荐作者

爱人如己

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

云雾

文章 0 评论 0

倒带

文章 0 评论 0

浮世清欢

文章 0 评论 0

撩起发的微风

文章 0 评论 0

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