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 иÑÐ»Ñ 2015 г..
ÐеÑод some() пÑовеÑÑеÑ, ÑдовлеÑвоÑÑÐµÑ Ð»Ð¸ какой-либо ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива ÑÑловиÑ, Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð² пеÑедаваемой ÑÑнкÑии.
ÐÑимеÑание:
ÐеÑод возвÑаÑÐ°ÐµÑ 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
СинÑакÑиÑ
arr.some(callback(element[, index[, array]])[, thisArg])
ÐаÑамеÑÑÑ
callback-
ФÑнкÑÐ¸Ñ Ð¿ÑовеÑки каждого ÑлеменÑа, пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑи аÑгÑменÑа:
element-
ТекÑÑий обÑабаÑÑваемÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива.
indexÐеобÑзаÑелÑнÑй-
ÐÐ½Ð´ÐµÐºÑ ÑекÑÑего обÑабаÑÑваемого ÑлеменÑа маÑÑива.
arrayÐеобÑзаÑелÑнÑй-
ÐаÑÑив, по коÑоÑÐ¾Ð¼Ñ Ð¾ÑÑÑеÑÑвлÑеÑÑÑ Ð¿ÑÐ¾Ñ Ð¾Ð´.
thisArgÐеобÑзаÑелÑнÑй-
ÐнаÑение, иÑполÑзÑемое в каÑеÑÑве
thisпÑи вÑполнении ÑÑнкÑииcallback.
ÐозвÑаÑаемое знаÑение
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® 2027 Language Specification> # sec-array.prototype.some> |