JS indexOf - Jak znaleźć indeks w tablicy i uniknąć pułapek?

Tablica `emotions` z 5 emotikonami. `js indexOf` pokazuje, że indeks 0 to emotikona z kroplą potu.

Napisano przez

Jacek Zając

Opublikowano

18 mar 2026

Spis treści

Metoda indexOf to najprostszy sposób, by w tablicy znaleźć pozycję konkretnej wartości i od razu wiedzieć, czy element w ogóle tam występuje. W praktyce przydaje się przy sprawdzaniu duplikatów, usuwaniu wpisów z listy, obsłudze wyboru użytkownika i walidacji danych. Pokażę tu, jak działa, gdzie łatwo się pomylić i kiedy lepiej sięgnąć po inną metodę.

Najkrótsza droga do znalezienia indeksu w tablicy

  • indexOf() zwraca pierwszy pasujący indeks albo -1, gdy wartości nie ma w tablicy.
  • JavaScript liczy indeksy od 0, więc pierwszy element ma indeks zero, nie jeden.
  • Metoda porównuje wartości przez ścisłe porównanie, więc NaN nie zostanie odnaleziony.
  • Drugi argument pozwala zacząć szukanie od wybranej pozycji, co ma znaczenie przy duplikatach.
  • Jeśli chcesz tylko sprawdzić obecność elementu, często czytelniejsze będzie includes().

Tablica `emotions` z emotikonami. `indexOf` pomaga znaleźć indeks elementu, np. pierwszy emotikon ma indeks 0. Długość tablicy to 5.

Jak działa indexOf w tablicy

W codziennej pracy traktuję indexOf jako prosty, liniowy skan tablicy od lewej do prawej. Metoda porównuje każdy element z szukaną wartością i zatrzymuje się na pierwszym trafieniu. Jeśli nic nie znajdzie, zwraca -1.

To ważne, bo wynik nie jest samą wartością logiczną. Dostajesz konkretną pozycję, a to otwiera drogę do dalszych operacji: usunięcia elementu, podmiany go albo odczytu sąsiednich danych. Gdy tablica jest mała, ten mechanizm jest bardzo wygodny. Gdy jest duża i szukasz w niej wielokrotnie, liniowe przeszukiwanie zaczyna mieć znaczenie, bo koszt rośnie proporcjonalnie do liczby elementów.

const miasta = ["Warszawa", "Kraków", "Gdańsk", "Kraków"];

console.log(miasta.indexOf("Kraków"));   // 1
console.log(miasta.indexOf("Poznań"));   // -1
console.log(miasta.indexOf("Kraków", 2)); // 3

Drugi argument, czyli fromIndex, pozwala ominąć początek tablicy. To przydaje się wtedy, gdy interesuje cię nie pierwsze wystąpienie, tylko kolejne. Dla mnie to jedna z tych drobnych funkcji, które wyglądają niepozornie, a w praktyce oszczędzają sporo ręcznego kombinowania. Zobaczmy teraz, gdzie taki prosty mechanizm daje najwięcej korzyści.

Przykłady, które pokazują realne zastosowania

Najlepiej widać wartość tej metody w zwykłych, powtarzalnych zadaniach. To nie jest narzędzie do skomplikowanej analizy danych. To metoda do szybkiego sprawdzenia: gdzie jest element i co dalej z tym miejscem zrobić.

Sprawdzanie duplikatów

Jeśli budujesz listę tagów, produktów albo wybranych opcji, indexOf pomaga łatwo uniknąć powtórzeń. Ja zwykle zapisuję wynik do zmiennej i dopiero potem podejmuję decyzję, zamiast od razu wciskać wszystko w jeden warunek.

const tagi = ["javascript", "frontend"];

if (tagi.indexOf("javascript") === -1) {
  tagi.push("javascript");
}

Taki zapis jest czytelny i bezpieczny. Gdy element już istnieje, nie dodajesz go drugi raz. Gdy go nie ma, dopisujesz go do tablicy. To dokładnie ten rodzaj prostego przepływu, w którym indexOf sprawdza się najlepiej.

Usuwanie elementu po indeksie

Wielu początkujących szuka elementu po wartości, a potem nie wie, jak go usunąć. Właśnie tu przydaje się indeks, bo splice() pracuje na pozycji, nie na samej wartości.

const koszyk = ["monitor", "mysz", "klawiatura"];
const index = koszyk.indexOf("mysz");

if (index !== -1) {
  koszyk.splice(index, 1);
}

To jeden z najpraktyczniejszych wzorców. Najpierw znajdujesz pozycję, potem zdejmujesz dokładnie jeden element. Bez zgadywania, bez ręcznego liczenia i bez ryzyka, że usuniesz coś innego niż planowałeś.

Przeczytaj również: Math.floor() w JavaScript - Zaokrąglanie liczb bez błędów?

Szukania od konkretnej pozycji

Jeśli tablica zawiera powtórzenia, fromIndex pozwala przejść od razu do dalszej części danych. To wygodne przy parsowaniu list, logice formularzy albo analizie kolejnych wystąpień tej samej wartości.

const oceny = [2, 3, 4, 3, 5];

console.log(oceny.indexOf(3));    // 1
console.log(oceny.indexOf(3, 2)); // 3

Ten sam mechanizm wykorzystasz, gdy chcesz znaleźć drugie wystąpienie po pierwszym trafieniu. Dzięki temu nie musisz ręcznie przeglądać tablicy od nowa. Ale zanim uznasz tę metodę za uniwersalną, warto zobaczyć jej ograniczenia, bo one w praktyce najczęściej zaskakują.

Gdzie metoda potrafi zaskoczyć

indexOf jest proste, ale właśnie przez to łatwo przypisać mu możliwości, których nie ma. Najwięcej problemów widzę w trzech miejscach: porównywaniu obiektów, obsłudze NaN i błędnym sprawdzaniu wyniku w instrukcji warunkowej.

  • Obiekty są porównywane przez referencję. Dwa obiekty o identycznej zawartości nadal są różnymi bytami, jeśli nie wskazują na tę samą pamięć.
  • NaN nie zostanie znalezione. To jedna z najbardziej znanych pułapek, bo ścisłe porównanie nie uznaje NaN za równe samemu sobie.
  • Nie sprawdzaj wyniku przez zwykłe if (index). Indeks 0 jest poprawnym wynikiem, ale w JavaScripcie jest traktowany jako wartość fałszywa.
const users = [{ id: 1 }, { id: 2 }];

console.log(users.indexOf({ id: 1 })); // -1

Ten przykład dobrze pokazuje różnicę między porównaniem wartości a porównaniem referencji. Dla obiektów indexOf zwykle nie wystarcza, bo nie analizuje pól, tylko sprawdza, czy to dokładnie ta sama instancja. Jeśli chcesz szukać po właściwości, naturalnym następnym krokiem jest findIndex(). I właśnie o tym jest kolejna sekcja.

Kiedy lepiej wybrać inną metodę

Nie każda sytuacja wymaga indexOf. Czasem potrzebujesz tylko odpowiedzi tak albo nie, czasem chcesz sprawdzić warunek na obiekcie, a czasem zależy ci na ostatnim wystąpieniu. Wtedy lepiej dobrać narzędzie do zadania niż na siłę używać jednej metody do wszystkiego.

Metoda Co zwraca Kiedy użyć Ograniczenie
indexOf() Indeks pierwszego trafienia albo -1 Gdy szukasz konkretnej wartości w tablicy Nie działa dobrze z obiektami i nie znajduje NaN
includes() true albo false Gdy chcesz tylko sprawdzić obecność elementu Nie daje indeksu, więc nie pomoże przy usuwaniu lub podmianie
findIndex() Indeks pierwszego elementu spełniającego warunek Gdy szukasz po właściwości lub złożonym kryterium Trzeba napisać funkcję warunku
lastIndexOf() Indeks ostatniego trafienia albo -1 Gdy interesuje cię ostatnie wystąpienie wartości Nie rozwiązuje problemu wyszukiwania po warunku

Jeśli mam prostą tablicę liczb, tekstów albo identyfikatorów, zwykle wybieram indexOf. Jeśli pracuję na obiektach, od razu przechodzę na findIndex(). Ta decyzja oszczędza czas i eliminuje całą klasę błędów, które później trudno wychwycić w testach. Zostaje jeszcze jedna sprawa: jak pisać z tą metodą kod, który jest czytelny i odporny na pomyłki.

Co warto zapamiętać przed użyciem indexOf

Najlepiej traktować indexOf jako narzędzie do szybkiego, dokładnego wyszukiwania w prostych tablicach. Właśnie tam sprawdza się najlepiej: daje czytelny indeks, łatwo go połączyć z splice() i od razu pokazuje, gdzie w strukturze znajduje się dana wartość.

  • Sprawdzaj wynik przez index !== -1, a nie przez sam warunek if (index).
  • Przy duplikatach pamiętaj o drugim argumencie, jeśli chcesz ominąć początek tablicy.
  • Do obiektów i złożonych warunków używaj findIndex(), nie indexOf().
  • Jeśli potrzebujesz tylko obecności elementu, includes() jest prostsze i bardziej bezpośrednie.
  • W bardzo częstych wyszukiwaniach w dużych zbiorach rozważ inną strukturę danych, na przykład Set albo Map.

Ja najczęściej zapisuję sobie prostą zasadę: jeśli szukam wartości atomowej, biorę indexOf; jeśli szukam po warunku, biorę findIndex(). Taki podział jest wystarczająco praktyczny, żeby szybko pisać kod, i wystarczająco precyzyjny, żeby nie wpadać w typowe pułapki związane z tablicami w JavaScript.

FAQ - Najczęstsze pytania

indexOf() to metoda tablicy w JavaScript, która zwraca indeks pierwszego wystąpienia podanej wartości. Jeśli wartość nie zostanie znaleziona, zwraca -1. Jest przydatna do szybkiego sprawdzania obecności elementu i jego pozycji.

Najczęściej używa się jej do sprawdzania, czy element już istnieje w tablicy (np. przed dodaniem, aby uniknąć duplikatów), do usuwania elementów z tablicy po ich indeksie (w połączeniu z splice()) oraz do wyszukiwania od konkretnej pozycji w tablicy.

indexOf() używa ścisłego porównania (===), które traktuje NaN jako nierówne samemu sobie. W przypadku obiektów porównuje referencje, a nie ich zawartość, więc dwa identyczne obiekty, ale z różnymi referencjami, nie zostaną uznane za takie same.

Jeśli potrzebujesz jedynie sprawdzić, czy dany element znajduje się w tablicy i nie interesuje Cię jego indeks, includes() jest bardziej czytelne i bezpośrednie. Zwraca ono po prostu true lub false, co upraszcza warunki logiczne.

Do wyszukiwania elementów na podstawie bardziej złożonych kryteriów, np. po właściwościach obiektów, lepiej użyć metody findIndex(). Pozwala ona przekazać funkcję zwrotną, która definiuje warunek wyszukiwania, oferując większą elastyczność.

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi:

js indexof js indexof tablica javascript indexof przykład indexof fromindex kiedy używać findindex indexof a findindex

Udostępnij artykuł

Jacek Zając

Jacek Zając

Nazywam się Jacek Zając i od dziewięciu lat zajmuję się programowaniem webowym. Moja przygoda z tą dziedziną zaczęła się od fascynacji tworzeniem stron internetowych, co szybko przerodziło się w pasję do nauczania innych. Lubię dzielić się wiedzą i pomagać osobom, które stawiają pierwsze kroki w programowaniu. Skupiam się na wyjaśnianiu złożonych zagadnień w przystępny sposób, aby każdy mógł zrozumieć podstawy i rozwijać swoje umiejętności. W moich artykułach poruszam różnorodne tematy związane z programowaniem webowym, od HTML i CSS po JavaScript i frameworki. Dokładam wszelkich starań, aby informacje, które prezentuję, były rzetelne, aktualne i łatwe do przyswojenia. Regularnie śledzę nowinki w branży, co pozwala mi na dostarczanie czytelnikom treści zgodnych z najnowszymi trendami. Wierzę, że dobrze zorganizowana wiedza to klucz do sukcesu w karierze programisty.

Napisz komentarz