Gdy aplikacja ma sprawdzić, czy wśród wielu wartości występuje choć jeden przypadek spełniający warunek, ręczne iterowanie po tablicy szybko staje się zbędne. Właśnie do takich zadań służy metoda some(), znana osobom szukającym informacji pod hasłem js some. Pokażę, jak działa, jakie przyjmuje argumenty, czym różni się od every(), includes() i find() oraz jak uniknąć typowych błędów.
Najważniejsze informacje o sprawdzaniu tablicy w JavaScript
- some() zwraca true, gdy przynajmniej jeden element przejdzie test.
- Metoda kończy działanie natychmiast po znalezieniu pasującej wartości.
- Pusta tablica zawsze daje wynik false.
- Callback otrzymuje element, indeks i całą tablicę.
- Do sprawdzania obecności konkretnej wartości często lepsze będzie includes().

Do czego służy metoda some()
Metoda Array.prototype.some() sprawdza, czy co najmniej jeden element tablicy spełnia określony warunek. Wynikiem jest zawsze wartość logiczna: true albo false.
const liczby = [3, 7, 12, 18];
const czyJestParzysta = liczby.some(liczba => liczba % 2 === 0);
console.log(czyJestParzysta); // true
W tym przykładzie nie interesuje mnie, ile liczb jest parzystych ani które dokładnie nimi są. Chcę tylko wiedzieć, czy istnieje przynajmniej jedna. To najważniejszy sposób myślenia o tej metodzie.
W praktyce używam jej przy walidacji formularzy, filtrowaniu uprawnień, sprawdzaniu statusów zamówień i analizie danych pobranych z API. Kod jest wtedy krótszy, a intencja czytelniejsza niż w przypadku pętli for z ręcznie ustawianą zmienną pomocniczą.
Jak działa callback przekazany do some()
Do metody przekazujemy funkcję testującą, nazywaną callbackiem. JavaScript uruchamia ją dla kolejnych elementów tablicy, aż callback zwróci wartość uznawaną za prawdziwą.
const produkty = [
{ nazwa: "Klawiatura", cena: 180 },
{ nazwa: "Monitor", cena: 950 },
{ nazwa: "Mysz", cena: 120 }
];
const maDrogieUrzadzenie = produkty.some(produkt => produkt.cena > 1000);
console.log(maDrogieUrzadzenie); // false
Callback może przyjąć trzy argumenty. Najczęściej potrzebny jest pierwszy, czyli bieżący element, ale indeks i tablica również bywają przydatne.
| Argument | Znaczenie | Przykład |
|---|---|---|
element |
Aktualna wartość tablicy | produkt.cena |
index |
Indeks aktualnego elementu | index === 0 |
array |
Cała tablica, po której iterujemy | array.length |
Można też zapisać callback jako zwykłą funkcję:
const wyniki = [48, 52, 67, 71];
const czyPierwszyWynikZdalny = wyniki.some(function(wynik, index) {
return index === 0 && wynik >= 50;
});
console.log(czyPierwszyWynikZdalny); // false
Istotne jest przerywanie działania po pierwszym trafieniu. Jeśli pierwszy element spełnia warunek, kolejne nie są już sprawdzane. Przy dużych tablicach może to ograniczyć liczbę operacji, choć nie traktowałbym tego jako zamiennika prawdziwej optymalizacji danych.
Praktyczne przykłady zastosowania w JavaScript
Sprawdzanie uprawnień użytkownika
Metoda dobrze pasuje do sytuacji, w której użytkownik może mieć wiele ról, ale dostęp wystarczy przyznać po znalezieniu jednej właściwej.
const role = ["user", "editor"];
const mozePublikowac = role.some(
nazwaRoli => nazwaRoli === "admin" || nazwaRoli === "editor"
);
console.log(mozePublikowac); // true
Ten zapis jasno pokazuje regułę biznesową: wystarczy rola administratora albo edytora. Nie trzeba tworzyć dodatkowej tablicy ani liczyć dopasowań.
Wykrywanie błędów formularza
const pola = [
{ nazwa: "email", poprawne: true },
{ nazwa: "haslo", poprawne: false },
{ nazwa: "telefon", poprawne: true }
];
const formularzMaBlad = pola.some(pole => !pole.poprawne);
console.log(formularzMaBlad); // true
To przykład, w którym liczy się samo istnienie problemu. Jeżeli potrzebujesz wyświetlić użytkownikowi wszystkie błędne pola, wybierz filter(), a nie some(), ponieważ ta metoda zwróci tylko informację logiczną.
Sprawdzanie danych z API
const zamowienia = [
{ id: 101, status: "wysłane" },
{ id: 102, status: "oczekuje" },
{ id: 103, status: "anulowane" }
];
const jestAnulowaneZamowienie = zamowienia.some(
zamowienie => zamowienie.status === "anulowane"
);
if (jestAnulowaneZamowienie) {
console.log("Co najmniej jedno zamówienie zostało anulowane");
}
W aplikacjach internetowych taki wzorzec często pojawia się przed wyświetleniem ostrzeżenia, zmianą koloru interfejsu albo zablokowaniem kolejnej operacji. Moim zdaniem to jedno z bardziej praktycznych zastosowań, bo kod od razu komunikuje, jakiego warunku szukamy.
Sprawdzanie zakresu liczb
const temperatury = [-4, 2, 7, 13, 18];
const czyBylMroz = temperatury.some(temperatura => temperatura < 0);
console.log(czyBylMroz); // true
Callback nie musi zwracać dosłownie true lub false. JavaScript ocenia wynik logicznie, ale dla czytelności najlepiej pisać warunek wprost. Dzięki temu osoba przeglądająca kod nie musi zgadywać, co oznacza zwracana liczba, tekst albo obiekt.
some() a includes(), find() i every()
Te metody bywają mylone, ponieważ wszystkie mogą służyć do sprawdzania danych w tablicy. Różnią się jednak tym, co zwracają i jaki problem rozwiązują.
| Metoda | Do czego służy | Wynik |
|---|---|---|
some() |
Sprawdza, czy przynajmniej jeden element spełnia warunek |
true lub false
|
every() |
Sprawdza, czy wszystkie elementy spełniają warunek |
true lub false
|
includes() |
Sprawdza obecność konkretnej wartości |
true lub false
|
find() |
Znajduje pierwszy element spełniający warunek | Element albo undefined
|
Jeśli chcesz sprawdzić dokładną wartość, wybierz prostsze rozwiązanie:
const kolory = ["niebieski", "zielony", "czerwony"];
kolory.includes("zielony"); // true
kolory.some(kolor => kolor === "zielony"); // true
Oba wywołania dadzą ten sam wynik, ale includes() lepiej opisuje intencję. Z kolei some() wygrywa wtedy, gdy warunek jest bardziej złożony, na przykład dotyczy właściwości obiektu albo kilku kryteriów naraz.
const ceny = [80, 150, 240];
ceny.every(cena => cena > 50); // true
ceny.some(cena => cena > 200); // true
ceny.find(cena => cena > 200); // 240
Prosta reguła pomaga uniknąć pomyłek. Pytanie „czy istnieje przynajmniej jeden?” oznacza some(). Pytanie „czy każdy?” oznacza every(). Pytanie „który konkretnie?” prowadzi do find().
Typowe błędy i ograniczenia tej metody
Brak instrukcji return
Najczęstszy błąd pojawia się przy użyciu nawiasów klamrowych w funkcji strzałkowej.
const liczby = [2, 4, 7];
const blad = liczby.some(liczba => {
liczba % 2 === 0;
});
console.log(blad); // false
Callback niczego tutaj nie zwraca, więc wynik każdej iteracji to undefined. Poprawny zapis wymaga słowa return:
const poprawnie = liczby.some(liczba => {
return liczba % 2 === 0;
});
console.log(poprawnie); // true
Oczekiwanie listy wyników
some() nie zwraca pasujących elementów. Jeśli potrzebujesz listy wszystkich liczb większych od 10, użyj filter(). Gdy interesuje Cię tylko odpowiedź „tak” lub „nie”, some() będzie właściwym narzędziem.
Pusta tablica
const dane = [];
console.log(dane.some(element => element)); // false
To logiczne zachowanie, ale potrafi zaskoczyć przy danych ładowanych asynchronicznie. Pusta tablica nie oznacza, że warunek został spełniony. Oznacza po prostu, że nie znaleziono żadnego elementu, który mógłby przejść test.
Przeczytaj również: React vs Angular - Co wybrać? Porównanie dla Twojego projektu
Modyfikowanie tablicy w callbacku
Technicznie callback może zmieniać tablicę, ale zwykle pogarsza to czytelność i utrudnia przewidywanie wyniku. Sam staram się traktować callback jako funkcję bez efektów ubocznych, która tylko sprawdza bieżący element i zwraca wynik logiczny.
Metoda pomija puste miejsca w tablicy, a jej działanie nie jest asynchroniczne. Jeśli callback wykonuje operacje z użyciem Promise, some() nie będzie automatycznie czekać na ich zakończenie.
Jak pisać czytelne warunki z some()
Najlepszy kod nie ogranicza się do skrócenia liczby linii. Powinien też jasno opisywać regułę, dlatego przy bardziej złożonych warunkach warto wydzielić funkcję o konkretnej nazwie.
function czyProduktJestDostepny(produkt) {
return produkt.stanMagazynowy > 0 && produkt.aktywny;
}
const produkty = [
{ nazwa: "Laptop", stanMagazynowy: 0, aktywny: true },
{ nazwa: "Monitor", stanMagazynowy: 4, aktywny: true }
];
const jestDostepnyProdukt = produkty.some(czyProduktJestDostepny);
console.log(jestDostepnyProdukt); // true
Taki zapis jest łatwiejszy do testowania i ponownego użycia. Nazwa czyProduktJestDostepny mówi więcej niż anonimowe wyrażenie z kilkoma operatorami logicznymi.
W prostych przypadkach funkcja strzałkowa pozostaje najlepszym wyborem:
const maNiepelnoletniego = osoby.some(osoba => osoba.wiek < 18);
Nie warto też używać some() tylko dlatego, że jest nowocześniejsze od pętli. Pętla nadal ma sens, gdy w środku trzeba wykonać wiele niezależnych operacji, obsłużyć błędy albo kontrolować przebieg algorytmu. Do jednego pytania logicznego metoda tablicowa jest jednak zwykle bardziej deklaratywna i łatwiejsza do odczytania.
Mały test, który dobrze utrwala działanie some()
Najprościej sprawdzić metodę na trzech przypadkach: dopasowanie na początku, dopasowanie na końcu i brak dopasowania. Taki zestaw pokazuje zarówno wynik, jak i fakt, że metoda nie musi przejść przez całą tablicę.
const wyniki = [12, 18, 21, 30];
console.log(wyniki.some(wynik => wynik > 25)); // true
console.log(wyniki.some(wynik => wynik < 10)); // false
console.log([].some(wynik => wynik > 0)); // false
Jeżeli uczysz się JavaScriptu, zapamiętaj jedno zdanie: some() odpowiada na pytanie, czy istnieje choć jeden element spełniający warunek. Gdy potrzebujesz wszystkich dopasowań, elementu albo sprawdzenia konkretnej wartości, wybierz odpowiednio filter(), find() lub includes(). Taki dobór metody sprawia, że kod nie tylko działa, ale też od razu wyjaśnia swoją intencję.