Я хочу сравнить каждую строку в массиве с заданной строкой. Моя текущая реализация:
function startsWith(element) {
return element.indexOf(wordToCompare) === 0;
}
addressBook.filter(startsWith);
Эта простая функция работает, но только потому, что прямо сейчас wordToCompare устанавливается как глобальная переменная, но, конечно, я хочу избежать этого и передать его как параметр. Моя проблема в том, что я не уверен, как определить startWith (), поэтому он принимает один дополнительный параметр, потому что я действительно не понимаю, как передаются параметры по умолчанию, которые он принимает. Я перепробовал все возможные способы, но ни один из них не помог.
Если бы вы также могли объяснить, как работают переданные параметры «встроенным» функциям обратного вызова (извините, я не знаю лучшего термина для них), это было бы здорово
источник
Второй параметр фильтра установит это внутри обратного вызова.
Итак, вы могли бы сделать что-то вроде:
источник
{one: 'haha', two:'hoho'}
Для тех, кто ищет альтернативу ES6 с использованием стрелочных функций, вы можете сделать следующее.
Обновленная версия с использованием включает :
источник
источник
Вы можете использовать функцию стрелки внутри фильтра, например:
Стрелочные функции на MDN
источник
Для всех, кто задается вопросом, почему их функция толстой стрелки игнорирует
[, thisArg]
, например, почему["DOG", "CAT", "DOG"].filter(animal => animal === this, "DOG")
возвращается[]
это потому, что
this
внутри этих стрелочных функций связываются, когда функция создается, и им присваивается значениеthis
в более широкой охватывающей области, поэтомуthisArg
аргумент игнорируется. Я довольно легко обошел это, объявив новую переменную в родительской области:let bestPet = "DOG"; ["DOG", "CAT", "DOG"].filter(animal => animal === bestPet); => ["DOG", "DOG"]
Вот ссылка на дополнительную литературу: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_separate_this
источник
на основе ответа oddRaven и https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Я сделал это двумя разными способами. 1) с использованием функционального способа. 2) встроенным способом.
источник
Есть простой способ использовать функцию фильтра, получить доступ ко всем параметрам и не усложнять его.
Если thisArg обратного вызова не установлен в другую область видимости, фильтр не создает свою собственную область видимости, и мы можем получить доступ к параметрам в текущей области. Мы можем установить this, чтобы определить другую область видимости, чтобы при необходимости получить доступ к другим значениям, но по умолчанию она установлена в ту область, из которой вызывается. Вы можете увидеть, как это используется для областей видимости Angular в этом стеке .
Использование indexOf противоречит цели фильтрации и увеличивает накладные расходы. Фильтр уже проходит через массив, так зачем нам снова перебирать его? Вместо этого мы можем сделать его простой чистой функцией .
Вот сценарий варианта использования в методе класса React, где состояние имеет массив с именем items , и с помощью фильтра мы можем проверить существующее состояние:
источник