JavaScript最快的方式来复制一个数组

为了在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];

更新:(只是为了澄清我自己)我知道这两种方法只做一个浅拷贝 :如果original_array包含对象的引用,对象将不会被克隆,但只有引用将被复制,因此两个数组都会引用相同的对象。 但这不是这个问题的重点。

我只问速度。


至少有5 (!)种方法来克隆数组:

  • 循环
  • Array.from()
  • CONCAT
  • 传播运营商等(如此缓慢,现在忘记它)
  • 有一个huuuge BENCHMARKS线程,提供以下信息:

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

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

  • 这在2016年7月仍然如此。

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

    while循环

    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 false
    origAr[0] == clonedArr[0] //returns true
    

    技术上slice是最快的方法, 但是如果你加它还要快0开始的索引。

    myArray.slice(0);
    

    比速度快,

    myArray.slice();
    

    http://jsperf.com/cloning-arrays/3


    那么es6的方式呢?

    arr2 = [...arr1];
    
    链接地址: http://www.djcxy.com/p/48363.html

    上一篇: Javascript fastest way to duplicate an Array

    下一篇: How to print the full NumPy array?