Skip to main content

Метод some() у масиві

some() це логічний метод масиву, який перевіряє, чи є хоча б один елемент, що задовольняє умову, і повертає true або false. Щойно перший підхожий елемент знайдено, цикл припиняється, тому метод працює як швидка перевірка наявності, а не як повний перебір.

Теорія

TL;DR

  • some() повертає true, якщо умову виконує хоча б один елемент, інакше false.
  • Перебір зупиняється на першому збігу, решта елементів не перевіряється.
  • Для порожнього масиву результат завжди false.
  • Колбек мусить повертати значення, інакше умова завжди хибна.
  • some() це «хоча б один», every() це «усі», find() повертає сам елемент, filter() повертає масив.

Швидкий приклад

javascript
const numbers = [1, 3, 5, 6, 7]; const hasEven = numbers.some(num => num % 2 === 0); console.log(hasEven); // true

some() повернув true, бо в масиві є принаймні одне парне число (6), і на ньому перебір зупинився.

Синтаксис і параметри

javascript
const result = array.some((element, index, array) => { return condition; });

Параметри колбека:

АргументОпис
elementпоточний елемент масиву
indexіндекс поточного елемента
arrayсам вихідний масив

Типові сценарії використання

Перевірка, чи є повнолітні користувачі. Метод зупиняється, щойно знаходить першого дорослого користувача.

javascript
const users = [ { name: 'Tim', age: 17 }, { name: 'Alex', age: 21 }, { name: 'John', age: 16 } ]; const hasAdult = users.some(user => user.age >= 18); console.log(hasAdult); // true

Перевірка наявності значення.

javascript
const fruits = ['apple', 'banana', 'cherry']; const hasBanana = fruits.some(fruit => fruit === 'banana'); console.log(hasBanana); // true const hasMango = fruits.some(fruit => fruit === 'mango'); console.log(hasMango); // false

Порожній масив. Елементів немає, тож жоден із них не може задовольнити умову.

javascript
console.log([].some(x => x > 0)); // false

Наочний приклад на числах.

javascript
const arr = [1, 2, 3, 4, 5]; console.log(arr.some(x => x > 3)); // true console.log(arr.some(x => x < 0)); // false

Різниця між some() і every()

some() відповідає на питання «чи є хоча б один», а every() на питання «чи всі». Обидва зупиняються достроково: some() на першому true, every() на першому false.

javascript
const ages = [18, 22, 30, 16]; console.log(ages.some(age => age < 18)); // true, є хоча б один неповнолітній console.log(ages.every(age => age >= 18)); // false, не всі дорослі

Варто пам'ятати і про крайній випадок: на порожньому масиві some() дає false, а every() дає true.

Коли брати some(), а коли інші методи

МетаЧи підходить some()
Перевірити, що є хоча б один елемент за умовоюТак
Перевірити, що всі елементи відповідають умовіНі, потрібен every()
Знайти сам елементНі, потрібен find()
Отримати список усіх підхожих елементівНі, потрібен filter()

Порівняння зі схожими методами:

МетодЩо повертаєУмоваЧи зупиняється після першого збігу
some()true / falseхоч один елемент відповідаєтак
every()true / falseусі елементи відповідаютьтак, на першому false
find()елемент або undefinedхоч один елемент відповідаєтак
filter()новий масивусі підхожі елементині

Формула для запам'ятовування: arr.some(умова) дає true або false.

Типові помилки

1. Очікувати масив замість булевого значення.

javascript
const result = arr.some(x => x > 10); console.log(result.length); // TypeError, some() повертає true або false

2. Забутий return у колбеку з фігурними дужками. Функція повертає undefined, що завжди хибне, тож результат завжди false.

javascript
arr.some(num => { num > 5 }); // завжди false

Правильно:

javascript
arr.some(num => num > 5); // або arr.some(num => { return num > 5 });

3. Плутати some() з every(). some() це хоча б один елемент проходить умову, every() це всі елементи проходять умову. Заміна одного одним тихо змінює логіку перевірки.

4. Використовувати some() заради побічних ефектів. Метод призначений для перевірки, а не для обходу з діями; для цього є forEach() або звичайний for...of.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.