Jestem zdezorientowany między różnicą między dwiema funkcjami indexOf i znalezieniem indeksu w tablicy.
Dokumentacja mówi
findIndex - zwraca indeks pierwszego elementu w tablicy, w której predykat ma wartość true, a wartość -1 w innym przypadku.
i
indexOf - zwraca indeks pierwszego wystąpienia wartości w tablicy.
javascript
Rahul Singh
źródło
źródło
Odpowiedzi:
Główną różnicą są parametry tych funkcji:
Array.prototype.indexOf()
oczekuje wartości jako pierwszego parametru. To sprawia, że dobrym wyborem jest znalezienie indeksu w tablicach typów pierwotnych (takich jak string, number lub boolean).Array.prototype.findIndex()
oczekuje wywołania zwrotnego jako pierwszego parametru. Użyj tego, jeśli potrzebujesz indeksu w tablicach z typami innymi niż prymitywne (np. Obiekty) lub warunek wyszukiwania jest bardziej złożony niż tylko wartość.Zobacz linki do przykładów obu przypadków.
źródło
indexOf
będzie działać, aby znaleźć obiekty. Ważne jest, aby uzyskać rozróżnienie, że akceptuje pojedynczy obiekt, a nie tylko wartość, i porównuje według równości, a nie wartości. Per Mozilla docs:indexOf() compares searchElement to elements of the Array using strict equality (the same method used by the === or triple-equals operator).
Proszę zmienićfindIndex
wyjaśnienie, aby zawierało tylko „lub twój warunek znalezienia jest bardziej złożony niż tylko pojedyncza wartość lub odniesienie”, aby poprawić to, ponieważ pierwotnie sprowadziło mnie na manowce. Dzięki![{a:1}].indexOf({a:1})
zwraca,-1
chociaż obiekt wydaje się być taki sam (ale tak nie jest). Nie jestem pewien, czy te informacje są pomocne w udzieleniu odpowiedzi, ponieważ mogą być mylące. Jeśli chcesz dowiedzieć się więcej na temat dokładnego zachowania języka, przeczytaj specyfikację..indexOf(NaN)
zawsze wróci,-1
ponieważNaN==NaN
zawszefalse
.NaN
jest prymitywny typ botypeof NaN
tonumber
i tak sąnull
iundefined
tak chciałbym zmienić to, aby uniknąć mówiącindexOf
prace na prymitywnych typówFindIndex jest przydatny, jeśli chcesz znaleźć pierwszy element, który pasuje do twojego predykatu: w przykładzie W3C są liczby i dopasowania, jeśli wiek klienta jest wyższy lub równy 18.
konsola:
Możesz znaleźć dokładny indeks elementu za pomocą funkcji indexOf Array, ale nie możesz przekazać predykatu. Szybciej jest, jeśli chcesz znaleźć określony element:
zwroty:
Zliczanie indeksów zaczyna się od 0, więc indeks pierwszego elementu to 0.
źródło
Główną różnicą są parametry tych funkcji:
-> Array.prototype.indexOf () :
-> Array.prototype.findIndex () :
źródło
Możesz również użyć
includes
:ale wolę
indexOf
metodę:źródło
indexOf
jest również znacznie szybszy.Inną różnicą jest to, że dzięki funkcji findIndex () użytkownik może zastosować jakąś funkcję i znaleźć element w tablicy, który przejdzie test.
Ale to samo nie jest prawdą z operatorem indexOf () . Użytkownik może po prostu sprawdzić, czy dany element istnieje w tablicy, czy nie.
źródło
Prosty - jakiego rodzaju struktury tablicy używasz?
findIndex()
,;indexOf()
.„Chcę znaleźć indeks w tablicy obiektów z kluczem„ Pomarańczowy ”.
„Chcę znaleźć indeks w prostej tablicy ”.
źródło
Możesz wypróbować poniższe kody: -
źródło