Fastest way to duplicate an array in JavaScript - slice vs. 'for' loop

后端 未结 22 1507
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-22 02:10

In order to duplicate an array in JavaScript: which of the following is faster to use?

###Slice method

var dup_array = original_array.slice();
<         


        
22条回答
  •  温柔的废话
    2020-11-22 02:47

    There are at least 6 (!) ways to clone an array:

    • loop
    • slice
    • Array.from()
    • concat
    • spread operator (FASTEST)
    • map A.map(function(e){return e;});

    There has been a huuuge BENCHMARKS thread, providing following information:

    • for blink browsers slice() is the fastest method, concat() is a bit slower, and while loop is 2.4x slower.

    • for other browsers while loop is the fastest method, since those browsers don't have internal optimizations for slice and concat.

    This remains true in Jul 2016.

    Below are simple scripts that you can copy-paste into your browser's console and run several times to see the picture. They output milliseconds, lower is better.

    while loop

    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);
    

    slice

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

    Please note that these methods will clone the Array object itself, array contents however are copied by reference and are not deep cloned.

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

提交回复
热议问题