ForEach, ForEach, Map, Filter, Find: что быстрее?

ForEach, ForEach, Map, Filter, Find: что быстрее?

2 марта 2022 г.

Вам нужно искать значение в каком-то большом массиве в Javascript и задаваться вопросом, какая функция работает быстрее? Этот пост может помочь.


Эксперимент


Идея очень проста. Я сравнил время выполнения этих пяти функций с массивом из 50 миллионов значений и искал целевое значение. Вот используемый код. Я запустил этот код, используя Node.js версии 16.13.0.


```javascript


константные данные = массив (50000000)


.заполнить(0)


.map((_, я) => я);


постоянная цель = 1259585;


пусть требуетсяЗначение;


console.time('для');


for (пусть значение данных) {


если (значение === цель) {


требуемое значение = значение;


перерыв;


console.timeEnd('для');


console.time('для каждого');


data.forEach((значение) => {


если (значение === цель) {


требуемое значение = значение;


console.timeEnd('для каждого');


console.time('найти');


WantedValue = data.find((v) => v === target);


console.timeEnd('найти');


console.time('фильтр');


WantedValue = data.filter((v) => v === target)[0];


console.timeEnd('фильтр');


console.time('карта');


data.map((значение) => {


если (значение === цель) {


требуемое значение = значение;


console.timeEnd('карта');


Результаты


```javascript


для: 815,528 мс


для каждого: 1,196 с


найти: 31,71 мс // Победитель


фильтр: 1,218 с


карта: 1,685 с


  • Ожидалось, что map, forEach и filter будут самыми медленными функциями, так как движок узла должен был, используя эти функции, проходить через каждое значение.

Заключительные слова


  • Этот эксперимент показал, что нет смысла использовать карту, forEach или функцию фильтра, если нужно искать только одно значение в каком-то большом массиве. Использование map или forEach имеет смысл, если вы хотите запустить некоторый код для элементов массива.

  • Помимо того, что функция find работает быстрее, она дает дополнительное преимущество по сравнению с циклом for, заключающееся в получении результата всего в одной строке кода.

Если этот пост был вам чем-то полезен, пожалуйста, не стесняйтесь поделиться им. Вы также можете подписаться на мой аккаунт в Твиттере, если хотите видеть больше контента, связанного с веб-программированием.



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE