Array.prototype.some()
Метод some()
(якийсь) перевіряє, чи проходить хоча б один елемент масиву тест, реалізований у переданій функції. Цей метод повертає істинність, якщо знаходить в масиві елемент, для якого надана функція повертає істинність, інакше – хибність. Він не змінює масив.
Спробуйте його в дії
Синтаксис
some(callbackFn)
some(callbackFn, thisArg)
Параметри
callbackFn
(функція зворотного виклику)Функція для виконання на кожному елементі масиву. Повинна повертати істинне значення, коли елемент проходить перевірку, а інакше – хибне. Ця функція викликається з наступними аргументами:
element
(елемент)Поточний елемент масиву, що обробляється.
index
(індекс)Індекс поточного елементу масиву, що обробляється.
array
(масив)Масив, на котрому викликали
some()
.
thisArg
(аргументthis
) Необов'язковеЗначення, котре використовуватиметься як
this
при виконанніcallbackFn
. Докладніше – в ітеративних методах.
Повернене значення
true
, якщо функція зворотного виклику поверне істинне значення принаймні для одного елемента масиву. Інакше – false
.
Опис
Метод some()
є ітеративним методом. Він викликає надану функцію callbackFn
один раз для кожного елемента масиву, поки callbackFn
не поверне значення істинності. Якщо такий елемент знайдено, то some()
негайно повертає true
і припиняє ітерування масиву. Інакше, якщо callbackFn
повертає значення хибності для всіх елементів, то some()
повертає false
.
some()
діє подібно до квантора існування в математиці. Наприклад, для порожнього масиву він повертає false
для будь-якої умови.
callbackFn
закликається лише для тих індексів масиву, що мають відповідні їм значення. Вона не закликається для порожніх комірок у розріджених масивах.
some()
не видозмінює масив, на котрому викликаний, але функція, передана як callbackFn
, може це робити. Проте зверніть увагу на те, що довжина масиву зберігається до першого заклику callbackFn
. Таким чином:
callbackFn
не оброблятиме жодних елементів, доданих поза початковою довжиною масиву, актуальною на мить початку викликуsome()
.- Зміни до вже оброблених індексів не призводять до повторного виклику на них
callbackFn
. - Якщо наявний, поки необроблений елемент масиву змінюється
callbackFn
, то його значення, передане вcallbackFn
, буде значенням на ту мить, коли цей елемент обробляється. Видалені елементи – не обробляються.
Застереження: Паралельні зміни, подібні до описаних вище, часто призводять до складно зрозумілого коду і, як правило, їх слід уникати (за винятком спеціальних випадків).
Метод some()
є узагальненим. Він лишень очікує, що значення this
матиме властивість length
, а також властивості з цілочисловими ключами.
Приклади
Перевірка значення елементів масиву
Наступний приклад перевіряє, чи є який-небудь елемент масиву більшим за 10.
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
Перевірка елементів масиву за допомогою стрілкових функцій
Стрілкові функції надають коротший синтаксис для такої ж перевірки.
[2, 5, 8, 1, 4].some((x) => x > 10); // false
[12, 5, 8, 1, 4].some((x) => x > 10); // true
Перевірка існування значення в масиві
Щоб імітувати функцію метода includes()
, ця власна функція повертає true
, якщо елемент існує в масиві:
const fruits = ["яблуко", "банан", "манго", "гуава"];
function checkAvailability(arr, val) {
return arr.some((arrVal) => val === arrVal);
}
checkAvailability(fruits, "кела"); // false
checkAvailability(fruits, "банан"); // true
Перетворення будь-якого значення на булеве
const TRUTHY_VALUES = [true, "true", 1];
function getBoolean(value) {
if (typeof value === "string") {
value = value.toLowerCase().trim();
}
return TRUTHY_VALUES.some((t) => t === value);
}
getBoolean(false); // false
getBoolean("false"); // false
getBoolean(1); // true
getBoolean("true"); // true
Використання some() на розріджених масивах
some()
не запускатиме свій предикат на порожніх комірках.
console.log([1, , 3].some((x) => x === undefined)); // false
console.log([1, , 1].some((x) => x !== 1)); // false
console.log([1, undefined, 1].some((x) => x !== 1)); // true
Виклик some() на об'єктах-немасивах
Метод some()
зчитує з this
властивість length
, а потім звертається до кожної цілочислової властивості.
const arrayLike = {
length: 3,
0: "a",
1: "b",
2: "c",
};
console.log(Array.prototype.some.call(arrayLike, (x) => typeof x === "number")); // false
Специфікації
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
some
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1.5 | Internet Explorer Full support 9 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 37 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |