Існує щонайменше 5 (!) Способів клонування масиву:
- петля
- скибочку
- Array.from ()
- конкат
- оператор розповсюдження (ШВИДКО)
Була знайдена низька нитка BENCHMARKS , яка надає таку інформацію:
для браузерів- блимачівslice()
- це найшвидший метод, 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);
Зверніть увагу, що ці методи будуть клонувати сам об’єкт масиву, проте вміст масиву копіюється за допомогою посилання та не є глибоким клонуванням.
origAr == clonedArr //returns false
origAr[0] == clonedArr[0] //returns true