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, andwhile loop
is 2.4x slower. - for other browsers
while loop
is the fastest method, since those browsers don’t have internal optimizations forslice
andconcat
.
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