Метод some() у масиві
some() це логічний метод масиву, який перевіряє, чи є хоча б один елемент, що задовольняє умову, і повертає true або false. Щойно перший підхожий елемент знайдено, цикл припиняється, тому метод працює як швидка перевірка наявності, а не як повний перебір.
Теорія
TL;DR
some()повертаєtrue, якщо умову виконує хоча б один елемент, інакшеfalse.- Перебір зупиняється на першому збігу, решта елементів не перевіряється.
- Для порожнього масиву результат завжди
false. - Колбек мусить повертати значення, інакше умова завжди хибна.
some()це «хоча б один»,every()це «усі»,find()повертає сам елемент,filter()повертає масив.
Швидкий приклад
const numbers = [1, 3, 5, 6, 7];
const hasEven = numbers.some(num => num % 2 === 0);
console.log(hasEven); // truesome() повернув true, бо в масиві є принаймні одне парне число (6), і на ньому перебір зупинився.
Синтаксис і параметри
const result = array.some((element, index, array) => {
return condition;
});Параметри колбека:
| Аргумент | Опис |
|---|---|
element | поточний елемент масиву |
index | індекс поточного елемента |
array | сам вихідний масив |
Типові сценарії використання
Перевірка, чи є повнолітні користувачі. Метод зупиняється, щойно знаходить першого дорослого користувача.
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Перевірка наявності значення.
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Порожній масив. Елементів немає, тож жоден із них не може задовольнити умову.
console.log([].some(x => x > 0)); // falseНаочний приклад на числах.
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.
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. Очікувати масив замість булевого значення.
const result = arr.some(x => x > 10);
console.log(result.length); // TypeError, some() повертає true або false2. Забутий return у колбеку з фігурними дужками. Функція повертає undefined, що завжди хибне, тож результат завжди false.
arr.some(num => { num > 5 }); // завжди falseПравильно:
arr.some(num => num > 5);
// або
arr.some(num => { return num > 5 });3. Плутати some() з every(). some() це хоча б один елемент проходить умову, every() це всі елементи проходять умову. Заміна одного одним тихо змінює логіку перевірки.
4. Використовувати some() заради побічних ефектів. Метод призначений для перевірки, а не для обходу з діями; для цього є forEach() або звичайний for...of.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.