Array.prototype.some()

Метод some() з'ясовує, чи містить масив хоч один елемент, для якого зазначена функція callback повертає true (або значення, що зводиться до true). Повертає значення типу Boolean.

Зауваження: для порожнього масиву цей метод незмінно повертає false.

Синтаксис

arr.some(callback(element[, index[, array]])[, thisArg])

Параметри

callback
Функція, яка перевіряє елементи. Приймає три аргументи:
element
Значення чергового елемента масиву.
index Optional
Індекс чергового елемента в масиві.
arrayOptional
Масив, до якого застосовано some().
thisArgOptional
Значення, що використовується як 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 (ECMA-262)
The definition of 'Array.prototype.some' in that specification.
Living Standard

Підтримка веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
someChrome Full support 1Edge Full support 12Firefox Full support 1.5IE Full support 9Opera Full support 9.5Safari Full support 3WebView Android Full support ≤37Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100

Legend

Full support  
Full support

Див. також