Разница между 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]