Метод some()
з'ясовує, чи містить масив хоч один елемент, для якого зазначена функція callback
вертає true
(або значення, що зводиться до true
). Повертає значення типу Boolean.
Заувага: для порожнього масива цей метод незмінно повертає false
.
Першокод цього прикладу збережено у репозиторії GitHub. Якщо ви хочете долучитися до створення чи поліпшення таких прикладів, пропонуйте нам свої зміни до репозиторію https://github.com/mdn/interactive-examples.
Синтаксис
arr.some(callback(element[, index[, array]])[, thisArg])
Параметри
callback
- Функція-перевіряч елементів. Приймає три аргументи:
element
- Значення чергового елемента масиву.
index
Optional- Індекс чергового елемента в масиві.
array
Optional- Масив, до якого застосовано
some()
.
thisArg
Optional- Значення, що використовується як
this
коли викликаєтьсяcallback
.
Вертає
true
, якщо функція-перевіряч вертає істинне значення принаймні для одного з елементів масива. Інакше false
.
Опис
Метод some()
викликає функцію callback
для кожного елемента в масиві один за одним, доки не знайде такий, для якого callback
вертає істинне значення (значення, яке стає true
внаслідок перетворення на Boolean). Щойно такий елемент знайдено, some()
негайно вертає true
, не перевіряючи решту елементів. Якщо таких елементів не знайдено, метод some()
вертає false
.
Зважте, що callback
викликається лише для індексів масива, яким надано значення. Тож індекси без встановлених значень, а також видалені елементи буде знехтувано.
Функція callback
викликається з трьома аргументами: значення елемента, індекс елемента і об'єкт масива, для якого викликано метод some()
.
Якщо для some()
зазначено параметр thisArg
, його буде використано як значення this
для функції callback
. Інакше буде використано значення undefined
. Зрештою, значення this
для функції callback
буде визначено відповідно до загальних правил.
Метод some()
не змінює масив, для якого його викликано.
Межі індексів елементів, які буде перевірено, встановлюються перед найпершим викликом callback
. Тож всі елементи, додані в кінець масива вже під час виконання some()
, буде знехтувано. Якщо значення котрогось елемента буде змінено зсередини callback
, наступний виклик callback
(якщо такий буде) це врахує. Видалені елементи перевірено не буде.
Приклади
Перевірка елементів масива
В цьому прикладі виклик some()
з'ясовує, чи містить масив числа більші від 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
, щойно знаходить шукане значення в масиві:
var fruits = ['яблуко', 'груша', 'персик', 'банан']; function contains(array, value) { return array.some(function(v) { return value === v; }); } contains(fruits, 'вишня'); // вертає false contains(fruits, 'банан'); // вертає true
Перевірка наявності певного значення в масиві стрілковою функцією
var fruits = ['яблуко', 'груша', 'персик', 'банан']; function contains(array, value) { return array.some(v => value === v); } contains(fruits, 'вишня'); // вертає false contains(fruits, 'банан'); // вертає true
Зведення всякого значення до Boolean
var TRUTHY_VALUES = [true, 'true', 1]; function getBoolean(value) { 'use strict'; if (typeof value === 'string') { value = value.toLowerCase().trim(); } return TRUTHY_VALUES.some(function(t) { return t === value; }); } getBoolean(false); // вертає false getBoolean('false'); // вертає false getBoolean(1); // вертає true getBoolean('true'); // вертає true
Запасний варіант (поліфіл)
Цей метод було стандартизовано 5-им випуском ECMA-262. Для рушіїв, що не мають підтримки цього метода, стане в пригоді наведене нижче рішення. Цей алгоритм точнісінько відповідає вимогам 5-го випуску ECMA-262 за умови, що Object
і TypeError
не було змінено, а виклик callback.call()
відповідає очікуваному Function.prototype.call()
:
// Production steps of ECMA-262, Edition 5, 15.4.4.17 // Reference: http://es5.github.io/#x15.4.4.17 if (!Array.prototype.some) { Array.prototype.some = function(fun, thisArg) { 'use strict'; if (this == null) { throw new TypeError('Array.prototype.some called on null or undefined'); } if (typeof fun !== 'function') { throw new TypeError(); } var t = Object(this); var len = t.length >>> 0; for (var i = 0; i < len; i++) { if (i in t && fun.call(thisArg, t[i], i, t)) { return true; } } return false; }; }
Специфікації
Специфікація | Статус | Коментар |
---|---|---|
ECMAScript 5.1 (ECMA-262) The definition of 'Array.prototype.some' in that specification. |
Standard | Початкова виознака. Запроваджено у JavaScript 1.6. |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Array.prototype.some' in that specification. |
Standard | |
ECMAScript Latest Draft (ECMA-262) The definition of 'Array.prototype.some' in that specification. |
Draft |
Підтримка веб-переглядачами
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
some | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1.5 | IE Full support 9 | Opera Full support Yes | Safari Full support Yes | WebView Android Full support ≤37 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
Legend
- Full support
- Full support