--- title: Array.prototype.some() slug: Web/JavaScript/Reference/Global_Objects/Array/some tags: - ECMAScript5 - Довідка - Масив - метод translation_of: Web/JavaScript/Reference/Global_Objects/Array/some ---
Метод some()
з'ясовує, чи містить масив хоч один елемент, для якого зазначена функція callback
повертає true
(або значення, що зводиться до true
). Повертає значення типу Boolean.
Зауваження: для порожнього масиву цей метод незмінно повертає false
.
Першокод цього прикладу збережено у репозиторії GitHub. Якщо ви хочете долучитися до створення чи покращення таких прикладів, пропонуйте нам свої зміни до репозиторію https://github.com/mdn/interactive-examples.
arr.some(callback(element[, index[, array]])[, thisArg])
callback
element
index
{{Optional_inline}}array
{{Optional_inline}}some()
.thisArg
{{Optional_inline}}this
коли викликається callback
.true
, якщо функція повертає {{Glossary("truthy", "істинне")}} значення принаймні для одного з елементів масива. Інакше false
.
Метод some()
викликає функцію callback
для кожного елемента в масиві один за одним, доки не знайде такий, для якого callback
повертає істинне значення (значення, яке стає true
внаслідок перетворення на Boolean). Щойно такий елемент знайдено, some()
негайно повертає true
, не перевіряючи решту елементів. Якщо таких елементів не знайдено, метод some()
повертає false
.
Зауважте, що callback
викликається лише для індексів масиву, яким надано значення. Тож індекси без встановлених значень, а також видалені елементи будуть знехтувані.
Функція callback
викликається з трьома аргументами: значення елемента, індекс елемента і об'єкт масиву, для якого викликано метод some()
.
Якщо для some()
визначено параметр thisArg
, його буде використано як значення this
для функції callback
. В іншому випадку, буде використано значення {{jsxref("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
Щоб відтворити поведінку метода {{jsxref("Array.prototype.includes()", "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
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 за умови, що {{jsxref("Object")}} і {{jsxref("TypeError")}} не було змінено, а виклик callback.call()
відповідає очікуваному {{jsxref("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; }; }
Специфікація | Статус | Коментар |
---|---|---|
{{SpecName('ES5.1', '#sec-15.4.4.17', 'Array.prototype.some')}} | {{Spec2('ES5.1')}} | Початкова виознака. Запроваджено у JavaScript 1.6. |
{{SpecName('ES6', '#sec-array.prototype.some', 'Array.prototype.some')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-array.prototype.some', 'Array.prototype.some')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.Array.some")}}