some() w JavaScript - jak działa i kiedy jej używać?

Wykres typowania języków programowania: JavaScript jest dynamiczny i słaby, TypeScript statyczny i silny.

Autor

Jacek Zając

Opublikowano

31 paź 2026

Spis treści

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().

JS logo i napis

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ę.

FAQ - Najczęstsze pytania

Metoda some() zwraca false, ponieważ w pustej tablicy nie ma żadnego elementu, który mógłby spełnić warunek. Nie oznacza to, że warunek został odrzucony przez konkretną wartość, lecz że nie znaleziono żadnego elementu do sprawdzenia.

Callback może otrzymać bieżący element, jego indeks oraz całą tablicę. Metoda przerywa działanie natychmiast po znalezieniu pierwszego elementu, dla którego callback zwróci wartość prawdziwą, więc kolejne elementy nie są już sprawdzane.

some() sprawdza, czy przynajmniej jeden element spełnia warunek, a every() wymaga spełnienia go przez wszystkie elementy. includes() służy do sprawdzania obecności konkretnej wartości, natomiast find() zwraca pierwszy pasujący element albo undefined.

Przy nawiasach klamrowych funkcja strzałkowa potrzebuje jawnego słowa return. Bez niego callback zwraca undefined w każdej iteracji, dlatego some() nie znajduje dopasowania. Można też użyć krótkiego zapisu bez nawiasów klamrowych, który zwraca wyrażenie automatycznie.

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi:

tablice some() callbacki find() includes()

Udostępnij artykuł

Jacek Zając

Jacek Zając

Nazywam się Jacek Zając i od sześciu lat zajmuję się programowaniem webowym. Moja przygoda z tym obszarem zaczęła się od chęci stworzenia własnej strony internetowej, co szybko przerodziło się w pasję do tworzenia aplikacji i rozwiązań, które mogą ułatwiać życie innym. Lubię dzielić się wiedzą, szczególnie w zakresie podstaw programowania oraz budowania responsywnych aplikacji internetowych. W moich tekstach staram się w przystępny sposób wyjaśniać złożone zagadnienia, porównując różne podejścia i technologie, a także zwracając uwagę na aktualne trendy w branży. Zawsze dbam o to, aby informacje, które przekazuję, były rzetelne i zrozumiałe, a także aby były zgodne z najnowszymi standardami. Moim celem jest nie tylko przekazywanie wiedzy, ale także inspirowanie innych do rozwijania swoich umiejętności w programowaniu.

Napisz komentarz