Array.prototype.some()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Метод some()
проверяет, удовлетворяет ли какой-либо элемент массива условию, заданному в передаваемой функции.
Примечание: Метод возвращает false
при любом условии для пустого массива.
Интерактивный пример
Синтаксис
arr.some(callback(element[, index[, array]])[, thisArg])
Параметры
Возвращаемое значение
true
, если функция проверки возвращает truthy значение хотя бы для одного элемента массива. Иначе, false
.
Описание
Метод some()
вызывает переданную функцию callback
один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдёт такой, для которого callback
вернёт истинное значение (значение, становящееся равным true
при приведении его к типу Boolean
). Если такой элемент найден, метод some()
немедленно вернёт true
. В противном случае, если callback
вернёт false
для всех элементов массива, метод some()
вернёт false
. Функция callback
вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.
Функция callback
вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.
Если в метод some()
был передан параметр thisArg
, при вызове callback
он будет использоваться в качестве значения this
. В противном случае в качестве значения this
будет использоваться значение undefined
. В конечном итоге, значение this
, наблюдаемое из функции callback
, определяется согласно обычным правилам определения this
, видимого из функции.
Метод some()
не изменяет массив, для которого он был вызван.
Диапазон элементов, обрабатываемых методом 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((elem) => elem > 10); // false
[12, 5, 8, 1, 4].some((elem) => elem > 10); // true
Проверка наличия элемента в массиве
Чтобы имитировать функцию метода includes()
, эта пользовательская функция возвращает true, если элемент существует в массиве:
const fruits = ["apple", "banana", "mango", "guava"];
function checkAvailability(arr, val) {
return arr.some(function (arrVal) {
return val === arrVal;
});
}
checkAvailability(fruits, "kela"); // false
checkAvailability(fruits, "banana"); // true
Проверка наличия элемента в массиве с использованием стрелочной функции
const fruits = ["apple", "banana", "mango", "guava"];
function checkAvailability(arr, val) {
return arr.some((arrVal) => val === arrVal);
}
checkAvailability(fruits, "kela"); // false
checkAvailability(fruits, "banana"); // true
Приведение значения к логическому типу
const 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
Полифил
Метод some()
был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может не присутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать some()
в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; и предполагает, что Object
и TypeError
имеют свои первоначальные значения и что callback.call
вычисляется в оригинальное значение Function.prototype.call()
.
// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.17
// Ссылка (en): http://es5.github.io/#x15.4.4.17
// Ссылка (ru): http://es5.javascript.ru/x15.4.html#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;
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for (var i = 0; i < len; i++) {
if (i in t && fun.call(thisArg, t[i], i, t)) {
return true;
}
}
return false;
};
}
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-array.prototype.some |
Совместимость с браузерами
BCD tables only load in the browser