Если вы попали на этот материал, наверняка Вас интересует вопрос скорости перебора массива или вопрос о том, какой же все таки перебор использовать. Ниже приведена таблица скорости и инструментов итерации…
Итак, поехали.

Метод 1

Метод основывается на обходе циклом for как в языках C/C++, java и т.д.

for(var i = 0;i < arr.length; i++){
  console.log(arr[i])
}

Измерения:

1ый этап114.3 ms
2ой этап120.9 ms
3ий этап116.0 ms
4ый этап114.6 ms
5ый этап 111.4 ms

Метод 2

Основывается на цикле while.

var index = 0;
while (index < arr.length) { 
    console.log(arr[index]); 
    index++; 
}
1ый этап119.5 ms
2ой этап114.7 ms
3ий этап114.2 ms
4ый этап121.0 ms
5ый этап 116.6 ms

Метод 3

Основывается на методе foreach. Он вызывает необходимую фугкцию один раз для элемента массива по порядку.

arr.forEach(myFunction); 
function myFunction(item, index) 
{ 
    console.log(item); 
}
1ый этап117.7 ms
2ой этап118.0 ms
3ий этап113.0 ms
4ый этап114.7 ms
5ый этап 108.8

Метод 4

Метод for in часто используется для обхода по объекту.

for(var item in arr){
  console.log(arr[item])
}
1ый этап118.8 ms
2ой этап107.9 ms
3ий этап121.5 ms
4ый этап111.1 ms
5ый этап 106.8 ms

Метод 5

Метод for of синтаксис из es6 для обхода коллекций.

for (let value of arr) {
  console.log(value); // 'a' 'b' 'c' 'd' 'e' 'f'
}
1ый этап114.3 ms
2ой этап114.6 ms
3ий этап107.7 ms
4ый этап107.4 ms
5ый этап 106.2 ms

Метод 6

Метод Map, используется для трансформации массива.

var new_items = items.map(function(key) {
  return key.length;
});
1ый этап109.2 ms
2ой этап113.6 ms
3ий этап110.4 ms
4ый этап109.7 ms
5ый этап112.4 ms

Метод 7

Метод Filter используется для фильтрации массива, например, когда нужно очистить от отрицательных чисел.

var positiveArr = arr.filter(function(number) {
  return number > 0;
})
1ый этап114.6 ms
2ой этап115.7 ms
3ий этап117.9 ms
4ый этап118.6 ms
5ый этап117.0 ms

Метод 8

Методы every/some используются для проверки массива.

var arr = [1, -1, 2, -2, 3];

function isPositive(number) {
  return number > 0;
}

alert( arr.every(isPositive) ); // false, не все положительные
alert( arr.some(isPositive) ); // true, есть хоть одно положительное
1ый этап126.1 ms
2ой этап117.2 ms
3ий этап119.8 ms
4ый этап120.2 ms
5ый этап112.6 ms

Итог скорости:

for of110.04 ms
map110.7 ms
for in113.22 ms
forEach114.42 ms
for(var i = 0;i < arr.length; i++)114.44 ms
filter116.96 ms
every/some119.18 ms
while122.8 ms

В заключение хочется сказать, что на самом деле скорость не сильно очевидная. Поэтому использовать инструмент можно смело тот, который Вам по душе. Но в погоне за скоростью можно выявить, что и как работает.
Надеюсь эта статья рассеит споры и мифы и даст объективный ответ тем, кто ищет ответ на вопрос о скорости итераторов и ленится сделать свой тест.

Тест я сохранил, можете найти его здесь: https://codepen.io/shmidtelson/pen/ebEmWa

Плагин рейтинга создан автором этого блога. Буду очень признателен, если вы сможете его поддержать (ссылка)

p.s. Если статья была полезной и вас переполняет чувство благодарности, можете поддержать меня долларом на патреоне

Об авторе

Web Developer. I have expirience in FrontEnd, Backend, Devops. PHP, Python, Javascript (Vue.js, React.js)

Смотреть посты