为了账号安全,请及时绑定邮箱和手机立即绑定

在JavaScript-片和“for”循环中复制数组的最快方法

在JavaScript-片和“for”循环中复制数组的最快方法

慕盖茨4494581 2019-06-19 10:34:56
为了在JavaScript中复制一个数组:下面哪一项使用起来更快?切片法var dup_array = original_array.slice();For环路for(var i = 0, len = original_array.length; i < len; ++i)    dup_array[i] = original_array[i];我知道这两种方式浅拷贝:如果原始数组包含对象的引用,则不会克隆对象,而是只复制引用,因此这两个数组都将具有对相同对象的引用。但这不是问题的重点。我只问速度。在JavaScript-片和“for”循环中复制数组的最快方法
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

至少有5(!)复制数组的方法:

  • 环路
  • 切片
  • Array.From()
  • 塔特
  • 传播算子(最快)

有一次基准螺纹,提供下列资料:

  • 眨眼浏览器slice()是最快的方法,concat()有点慢,而且while loop慢了2.4倍。

  • 适用于其他浏览器while loop是最快的方法,因为这些浏览器没有内部优化sliceconcat.

2016年7月的情况依然如此。

下面是简单的脚本,您可以复制粘贴到浏览器的控制台,并运行几次查看图片。它们输出毫秒,越低越好。

同时循环

n = 1000*1000;start = + new Date();a = Array(n); b = Array(n); i = a.length;while(i--) b[i] = a[i];console.log(new Date() - start);

切片

n = 1000*1000;start = + new Date();a = Array(n); b = a.slice();console.log(new Date() - start);

请注意,这些方法将克隆Array对象本身,但是数组内容是通过引用复制的,而不是深度克隆的。

origAr == clonedArr //returns falseorigAr[0] == clonedArr[0] //returns true


查看完整回答
反对 回复 2019-06-19
?
喵喔喔

TA贡献1735条经验 获得超5个赞

那ES6路呢?

arr2 = [...arr1];


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 681 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号