Что лучше использовать for…of или Array.prototype.forEach()?

200
27 декабря 2017, 22:19

Нужно сделать обход массива.

И стоит ли писать так [1,2,3].forEach(async function(e){console.log(e);}); ?

Или стоит писать так for (let e of [1,2,3]) {console.log(e);} ?

Аж от всего многообразия глаза разбегаются. Разницы не вижу. Хотелось бы более быстрого выполнения кода.

Answer 1

Самый быстрый способ - обход по индексу.

Пример на jsfiddle.

function fillArray(cnt) { 
  let res = []; 
  for (let i = 0; i < cnt; i++) { 
    res.push(i); 
  } 
  return res; 
} 
 
var arr = fillArray(5000000); 
 
var t = null; 
 
t = Date.now(); 
arr.forEach(async function(e, i) { 
  arr[i] += 1; 
}); 
console.log('time forEach async', Date.now() - t); 
 
t = Date.now(); 
arr.forEach(function(e, i) { 
  arr[i] += 1; 
}); 
console.log('time forEach', Date.now() - t); 
 
t = Date.now(); 
for (let e of arr) { 
  e += 1; // здесь мы значение массива не меняем 
} 
console.log('time let of', Date.now() - t); 
 
t = Date.now(); 
for (let i = 0; i < arr.length; i++) { 
  arr[i] += 1; 
} 
console.log('time for with index', Date.now() - t);

Answer 2

ИМХО лучше использовать просто for и с точки зрения читаемости, и с точки зрения производительности https://jsperf.com/for-vs-foreach-vs-for-of2

READ ALSO
Как остановить постоянную ajax подгрузку?

Как остановить постоянную ajax подгрузку?

При прокрутке до нужного места подгружаю часть сайта, но подгрузка постоянно происходит, не останавливаетсяКак сделать чтобы ajax запрос выполнялся...

229
Angular 5, ng build --prod, не работает ngModel, а также ngModelChange

Angular 5, ng build --prod, не работает ngModel, а также ngModelChange

Здравствуйте, может вопрос и банальный, но я только начал изучать ангуляр, и столкнулся с такой проблемой: ngModel и ngModelChange замечательно работает,...

280
Как удалить lineSymbol с карты

Как удалить lineSymbol с карты

Не могу удалить символ с polylines

237
Собрал такой вот скрипт при помощи гугла и мануалов, но, дальше, метод тыка не увенчался успехом

Собрал такой вот скрипт при помощи гугла и мануалов, но, дальше, метод тыка не увенчался успехом

В общем, требуется сгенерировать текст по принципу: тянем рандомно по одной строке из нескольких файлов, выбираем определенное количество...

216