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

为了在JavaScript中复制数组:以下哪项使用起来更快

Slice方法

var dup_array=original_array.slice();

用于循环

(变量i=0,len=original_array.length;i<len;++i)
dup_数组[i]=原始_数组[i];


我知道这两种方法都只进行浅层复制:如果原始数组包含对对象的引用,则不会克隆对象,但只复制引用,因此两个数组都将引用相同的对象。
但这不是问题的重点

我只是问速度

至少有6种方法可以克隆阵列:

  • 环路
  • 切片
  • 数组。from()
  • 海螺
  • 扩展操作员(最快)
  • mapA.map(函数(e){returne;})

有一个huuuge基准线程,提供以下信息:

  • 对于blink浏览器,slice()是最快的方法,concat()稍微慢一点,while loop慢2.4倍

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

2016年7月仍然如此

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

while循环

n=1000*1000;
开始=+新日期();
a=阵列(n);
b=阵列(n);
i=a.长度;
而(i--)b[i]=a[i];
console.log(新日期()-start);

切片

n=1000*1000;
开始=+新日期();
a=阵列(n);
b=a.切片();
console.log(新日期()-start);

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

origAr==clonedArr//返回false
origAr[0]==clonedArr[0]//返回true

发表评论