Метод 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 Latest Draft (ECMA-262)
The definition of 'Array.prototype.some' in that specification.
Draft

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
someChrome Full support YesEdge Full support 12Firefox Full support 1.5IE Full support 9Opera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes

Legend

Full support  
Full support

Див. також

Мітки документа й учасники

Зробили внесок у цю сторінку: asmforce
Востаннє оновлена: asmforce,