Spec-Zone.ru › JavaScript

Array.prototype.some()

Базовая поддержка Широко доступна

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

Метод some() экземпляров Array возвращает true, если он находит в массиве элемент, удовлетворяющий предоставленной тестовой функции. В противном случае он возвращает false.

Попробуйте

const array = [1, 2, 3, 4, 5];

// Checks whether an element is even
const even = (element) => element % 2 === 0;

console.log(array.some(even));
// Expected output: true

Синтаксис

some(callbackFn)
some(callbackFn, thisArg)

Параметры

callbackFn
Функция, выполняемая для каждого элемента массива. Она должна возвращать истинное значение, чтобы указать, что элемент прошел тест, и ложное значение в противном случае. Функция вызывается со следующими аргументами:
element
Текущий обрабатываемый элемент в массиве.
index
Индекс текущего обрабатываемого элемента в массиве.
array
Массив, на котором был вызван some().
thisArg Необязательный
Значение, которое будет использоваться как this при выполнении callbackFn. См. итеративные методы.

Возвращаемое значение

false, если callbackFn не возвращает истинное значение для элемента массива, в этом случае true возвращается немедленно.

Описание

Метод some() является итеративным методом. Он вызывает предоставленную функцию callbackFn один раз для каждого элемента в массиве, пока callbackFn не вернет истинное значение. Если такой элемент найден, some() немедленно возвращает true и прекращает итерацию по массиву. В противном случае, если callbackFn возвращает ложное значение для всех элементов, some() возвращает false. Прочтите раздел итеративные методы для получения более подробной информации о том, как эти методы работают в целом.

some() действует как квантор "существует" в математике. В частности, для пустого массива он возвращает false для любого условия.

callbackFn вызывается только для индексов массива, которым присвоены значения. Он не вызывается для пустых слотов в разреженных массивах.

some() не изменяет массив, на котором он вызывается, но функция, предоставленная как callbackFn, может это сделать. Однако учтите, что длина массива сохраняется перед первым вызовом callbackFn. Поэтому:

  • callbackFn не будет посещать никакие элементы, добавленные после начальной длины массива, когда начался вызов some().
  • Изменения в уже посещенных индексах не вызывают повторный вызов callbackFn для них.
  • Если существующий, еще не посещенный элемент массива изменяется функцией callbackFn, значение, передаваемое в callbackFn, будет значением на момент посещения этого элемента. Удаленные элементы (deleted) не посещаются.

Предупреждение: Одновременные модификации такого рода, как описано выше, часто приводят к труднопонимаемому коду и в целом их следует избегать (кроме особых случаев).

Метод 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 = ["apple", "banana", "mango", "guava"];

function checkAvailability(arr, val) {
  return arr.some((arrVal) => val === arrVal);
}

checkAvailability(fruits, "grapefruit"); // false
checkAvailability(fruits, "banana"); // true

Преобразование любого значения в Boolean

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

Использование третьего аргумента callbackFn

Аргумент array полезен, если вы хотите получить доступ к другому элементу в массиве, особенно когда у вас нет существующей переменной, ссылающейся на массив. Следующий пример сначала использует filter() для извлечения положительных значений, а затем использует some() для проверки, является ли массив строго возрастающим.

const numbers = [3, -1, 1, 4, 1, 5];
const isIncreasing = !numbers
  .filter((num) => num > 0)
  .some((num, idx, arr) => {
    // Without the arr argument, there's no way to easily access the
    // intermediate array without saving it to a variable.
    if (idx === 0) return false;
    return num <= arr[idx - 1];
  });
console.log(isIncreasing); // false

Использование 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() считывает свойство length объекта this, а затем получает доступ к каждому свойству, ключ которого является неотрицательным целым числом, меньшим length, до тех пор, пока все они не будут доступны или callbackFn не вернет true.

const arrayLike = {
  length: 3,
  0: "a",
  1: "b",
  2: "c",
  3: 3, // ignored by some() since length is 3
};
console.log(Array.prototype.some.call(arrayLike, (x) => typeof x === "number"));
// false

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-array.prototype.some

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
some
1
12
1.5
9.5
3
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • Polyfill для Array.prototype.some в core-js
  • Polyfill Array.prototype.some от es-shims
  • Руководство по индексируемым коллекциям
  • Array
  • Array.prototype.every()
  • Array.prototype.forEach()
  • Array.prototype.find()
  • Array.prototype.includes()
  • TypedArray.prototype.some()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API