Разница между find() и filter(). Shift() в JavaScript

Недавно я начал отказываться от чрезмерного использования подчеркивания / переноса в (некоторых) моих проектах и ​​понимаю, что в браузерах нет полной поддержки метода find. В чем разница между поиском метода ES6 и использованием.shift() над результатами фильтрации

var user = users.find(function() { ... } );

или же

var user = users.filter(function() { ... } ).shift();

Я предполагаю, что есть очевидная оптимизация по сравнению с методом "find" (перестаньте повторять при первом совпадении), но могу ли я получить неожиданные результаты, используя второй подход? Должен ли я использовать вместо этого polyfill? Зачем?

2 ответа

Решение

Помимо очевидных (и заметных) накладных расходов, да, результаты могут отличаться. filter выполняется до конца массива и вызывает его обратный вызов для каждого элемента; в отличие от find который останавливается после того, как нашел один. Когда обратный вызов генерирует исключение для одного из этих дополнительных итеративных элементов, результат будет другим.
Я не вижу веской причины не использовать find,

Используйте полифилл; users.filter(function() { ... } ).shift(); выбрасывает циклы при запуске ненужного сбора мусора.

  • filter сканирует весь массив и создает другой массив
  • shift теперь нужно изменить все индексы на временном массиве

Немного менее расточительный шаблон будет использовать users.filter(function() { ... } )[0]

Другие вопросы по тегам