在 JavaScript 中复制一个数组

发布于 2022-05-30 20:46:06 字数 2418 浏览 996 评论 0

有几种简单的方法可以在 JavaScript 中克隆数组。 您可以使用 Array#slice() 方法 扩展运算符

const arr = ['hello', 'world'];

// Clone using `slice()`
const arr2 = arr.slice();
arr2; // ['hello', 'world']
arr2 === arr; // false

// Clone using spread operator `...`
const arr3 = [...arr];
arr2; // ['hello', 'world']
arr2 === arr; // false

另外两种常见的方法是 concat()- 将数组转换为空数组 并使用 map() 方法:

// Clone using `concat()`
const arr4 = [].concat(arr);
arr4; // ['hello', 'world']
arr4 === arr; // false

// Clone using `map()`
const arr5 = arr.map(v => v);
arr5; // ['hello', 'world']
arr5 === arr; // false

这 4 种复制数组的方法实际上是相同的,没有太多理由偏爱其中一种。 最显着的区别在于 slice() 享受稍微更好的浏览器支持 - 一直到 Internet Explorer 4。

深拷贝与浅拷贝

请记住,上述所有 4 种方法都会创建数组的 浅层克隆 。 换句话说,它们克隆了数组本身,而 不是 数组元素。当你有一个基元数组(数字、字符串、 null, undefined),但是当你有一个对象数组时它会这样做。

const arr = [{ answer: 42 }];

const arr2 = arr.slice();
arr2[0].answer = 0;

// `0`, because `arr[0]` is a reference to the same object as `arr2[0]`
arr[0].answer;

JavaScript 没有用于深度克隆数组的内置方法。 您需要使用具有 cloneDeep() 函数,如 lodash

const arr = [{ answer: 42 }];

const arr2 = require('lodash').cloneDeep(arr);
arr2[0].answer = 0;

// `42`, because Lodash did a deep clone.
arr[0].answer;

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

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

发布评论

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

关于作者

0 文章
0 评论
23 人气
更多

推荐作者

qq_7J1imQ

文章 0 评论 0

《一串符号》

文章 0 评论 0

hls.

文章 0 评论 0

雅心素梦

文章 0 评论 0

塔塔猫

文章 0 评论 0

微信用户

文章 0 评论 0

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