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, заключающееся в получении результата всего в одной строке кода.
Если этот пост был вам чем-то полезен, пожалуйста, не стесняйтесь поделиться им. Вы также можете подписаться на мой аккаунт в Твиттере, если хотите видеть больше контента, связанного с веб-программированием.
Оригинал