Существует как минимум 5 (!) Способов клонировать массив:
- петля
- кусочек
- Array.from ()
- CONCAT
- оператор распространения (FASTEST)
Был поток huuuge BENCHMARKS , предоставляющий следующую информацию:
Для браузеров Blinkslice()
это самый быстрый метод, concat()
он немного медленнее и while loop
в 2,4 раза медленнее.
для других браузеров while loop
это самый быстрый метод, так как эти браузеры не имеют внутренних оптимизаций для slice
и concat
.
Это остается верным в июле 2016 года.
Ниже приведены простые сценарии, которые вы можете скопировать и вставить в консоль браузера и запустить несколько раз, чтобы увидеть картинку. Они выводят миллисекунды, чем меньше, тем лучше.
в то время как цикл
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