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
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 - Руководство по индексируемым коллекциям
ArrayArray.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