Разница между find() и фильтром(). Shift() на javascript
Недавно я начал отбрасывать undererscore/lodash overuse (некоторые из) моих проектов и понимаю, что нет полной поддержки метода find в браузерах. Какая разница между методом ES6 find и использованием .shift() над filter результаты
var user = users.find(function() { ... } );
или
var user = users.filter(function() { ... } ).shift();
Я предполагаю, что существует очевидная оптимизация по методу "найти" (прекратить итерацию по совпадению), но могу ли я получить неожиданные результаты с использованием второго подхода? Должен ли я использовать polyfill вместо этого? Почему?
Ответы
Ответ 1
Помимо очевидных (и заметных) накладных расходов, да, результаты могут отличаться. filter
выполняется до конца массива и вызывает его обратный вызов для каждого элемента; в отличие от find
, который останавливается после его обнаружения. Когда обратный вызов вызывает исключение на одном из этих дополнительных элементов с повторением, результат отличается.
Я не вижу веских оснований не использовать find
.
Ответ 2
Используйте polyfill; users.filter(function() { ... } ).shift();
отбрасывает циклы, вызывая ненужную сборку мусора.
-
filter
сканирует весь массив и создает еще один массив
-
shift
теперь необходимо изменить все индексы в массиве temp
Немного менее расточительный образец должен был бы использовать users.filter(function() { ... } )[0]