Chcę porównać każdy ciąg w tablicy z podanym ciągiem. Moja obecna realizacja to:
function startsWith(element) {
return element.indexOf(wordToCompare) === 0;
}
addressBook.filter(startsWith);
Ta prosta funkcja działa, ale tylko dlatego, że w tej chwili wordToCompare jest ustawiana jako zmienna globalna, ale oczywiście chcę tego uniknąć i przekazać to jako parametr. Mój problem polega na tym, że nie jestem pewien, jak zdefiniować startedWith (), więc akceptuje jeden dodatkowy parametr, ponieważ tak naprawdę nie rozumiem, w jaki sposób są przekazywane domyślne parametry, które przyjmuje. Wypróbowałem wszystkie możliwe sposoby i żaden z nich nie działa.
Gdybyś mógł również wyjaśnić, jak działają parametry przekazane do `` wbudowanych '' funkcji zwrotnych (przepraszam, nie znam lepszego terminu na te), byłoby świetnie
źródło
Drugi parametr filtru ustawi to w wywołaniu zwrotnym.
Możesz więc zrobić coś takiego:
źródło
{one: 'haha', two:'hoho'}
Dla tych, którzy szukają alternatywy dla ES6 z funkcjami strzałkowymi, możesz wykonać następujące czynności.
Zaktualizowana wersja przy użyciu obejmuje :
źródło
źródło
Możesz użyć funkcji strzałek wewnątrz filtra, na przykład:
Funkcje strzałek na MDN
źródło
Dla każdego, kto zastanawia się, dlaczego ignoruje funkcję fat arrow
[, thisArg]
, np. Dlaczego["DOG", "CAT", "DOG"].filter(animal => animal === this, "DOG")
zwroty[]
Dzieje się tak dlatego, że
this
wewnątrz tych strzałek funkcje są powiązane, gdy funkcja jest tworzona i są ustawiane na wartośćthis
w szerszym zakresie obejmującym, więcthisArg
argument jest ignorowany. Poradziłem sobie z tym dość łatwo, deklarując nową zmienną w zakresie nadrzędnym:let bestPet = "DOG"; ["DOG", "CAT", "DOG"].filter(animal => animal === bestPet); => ["DOG", "DOG"]
Oto link do dalszych lektur: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_separate_this
źródło
na podstawie odpowiedzi oddRaven i https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
zrobiłem to w 2 inny sposób. 1) za pomocą sposobu funkcji. 2) przy użyciu metody inline.
źródło
Istnieje łatwy sposób korzystania z funkcji filtra, dostępu do wszystkich parametrów i nie komplikowania go zbytnio.
O ile thisArg wywołania zwrotnego nie jest ustawione na inny filtr zakresu, nie tworzy własnego zakresu i możemy uzyskać dostęp do parametrów w bieżącym zakresie. Możemy ustawić „this”, aby zdefiniować inny zakres, aby w razie potrzeby uzyskać dostęp do innych wartości, ale domyślnie jest ustawiony na zakres, z którego jest wywoływany. Możesz zobaczyć, że jest to używane dla teleskopów Angular w tym stosie .
Korzystanie z indexOf jest sprzeczne z celem filtra i zwiększa obciążenie. Filtr już przechodzi przez tablicę, więc dlaczego musimy ponownie go iterować? Zamiast tego możemy uczynić z tego prostą czystą funkcję .
Oto scenariusz użycia w ramach metody klasy React, w którym stan ma tablicę o nazwie items , a za pomocą filtru możemy sprawdzić istniejący stan:
źródło