Array.prototype.findIndex()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since ÑенÑÑбÑÑ 2015 г..
Сводка
ÐеÑод findIndex() возвÑаÑÐ°ÐµÑ Ð¸Ð½Ð´ÐµÐºÑ Ð² маÑÑиве, еÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑдовлеÑвоÑÑÐµÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¿ÑовеÑÑÑÑей ÑÑнкÑии. РпÑоÑивном ÑлÑÑае возвÑаÑаеÑÑÑ -1.
Также ÑмоÑÑиÑе меÑод find(), коÑоÑÑй возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение найденного в маÑÑиве ÑлеменÑа вмеÑÑо его индекÑа.
СинÑакÑиÑ
arr.findIndex(callback[, thisArg])
ÐаÑамеÑÑÑ
callback-
ФÑнкÑиÑ, вÑзÑваÑÑаÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ знаÑÐµÐ½Ð¸Ñ Ð² маÑÑиве, пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑи аÑгÑменÑа:
thisArg-
ÐеобÑзаÑелÑнÑй паÑамеÑÑ. ÐнаÑение, иÑполÑзÑемое в каÑеÑÑве
thisпÑи вÑполнении ÑÑнкÑииcallback.
ÐпиÑание
ÐеÑод findIndex вÑзÑÐ²Ð°ÐµÑ Ð¿ÐµÑеданнÑÑ ÑÑнкÑÐ¸Ñ callback один Ñаз Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа, пÑиÑÑÑÑÑвÑÑÑего в маÑÑиве, до ÑеÑ
поÑ, пока она не веÑнÑÑ true. ÐÑли Ñакой ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð½Ð°Ð¹Ð´ÐµÐ½, меÑод findIndex немедленно веÑнÑÑ Ð¸Ð½Ð´ÐµÐºÑ ÑÑого ÑлеменÑа. РпÑоÑивном ÑлÑÑае, меÑод findIndex веÑнÑÑ -1. ФÑнкÑÐ¸Ñ callback вÑзÑваеÑÑÑ ÑолÑко Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов маÑÑива, имеÑÑиÑ
пÑиÑвоеннÑе знаÑениÑ; она не вÑзÑваеÑÑÑ Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов, коÑоÑÑе бÑли ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð¸Ð»Ð¸ коÑоÑÑм знаÑÐµÐ½Ð¸Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не пÑиÑваивалиÑÑ.
ФÑнкÑÐ¸Ñ callback вÑзÑваеÑÑÑ Ñ ÑÑÐµÐ¼Ñ Ð°ÑгÑменÑами: знаÑением ÑлеменÑа, индекÑом ÑлеменÑа и маÑÑивом, по коÑоÑÐ¾Ð¼Ñ Ð¾ÑÑÑеÑÑвлÑеÑÑÑ Ð¿ÑоÑ
од.
ÐÑли в меÑод findIndex бÑл пеÑедан паÑамеÑÑ thisArg, пÑи вÑзове callback он бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² каÑеÑÑве знаÑÐµÐ½Ð¸Ñ this. РпÑоÑивном ÑлÑÑае в каÑеÑÑве знаÑÐµÐ½Ð¸Ñ this бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð·Ð½Ð°Ñение undefined.
ÐеÑод findIndex не изменÑÐµÑ Ð¼Ð°ÑÑив, Ð´Ð»Ñ ÐºÐ¾ÑоÑого он бÑл вÑзван.
Ðиапазон ÑлеменÑов, обÑабаÑÑваемÑÑ
меÑодом findIndex, ÑÑÑанавливаеÑÑÑ Ð´Ð¾ пеÑвого вÑзова ÑÑнкÑии callback. ÐлеменÑÑ, добавленнÑе в маÑÑив поÑле наÑала вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÑода findIndex, не бÑдÑÑ Ð¿Ð¾ÑеÑÐµÐ½Ñ ÑÑнкÑией callback. ÐÑли ÑÑÑеÑÑвÑÑÑие, непоÑеÑение ÑлеменÑÑ Ð¼Ð°ÑÑива изменÑÑÑÑÑ ÑÑнкÑией callback, иÑ
знаÑениÑ, пеÑеданнÑе в ÑÑнкÑиÑ, бÑдÑÑ Ð·Ð½Ð°ÑениÑми на ÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени, когда меÑод findIndex поÑеÑÐ¸Ñ Ð¸Ñ
; ÑдалÑннÑе ÑлеменÑÑ Ð¿Ð¾ÑеÑÐµÐ½Ñ Ð½Ðµ бÑдÑÑ.
ÐÑимеÑÑ
>ÐÑимеÑ: поиÑк индекÑа пÑоÑÑого ÑиÑла в маÑÑиве
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð½Ð°Ñ Ð¾Ð´Ð¸Ñ Ð² маÑÑиве Ð¸Ð½Ð´ÐµÐºÑ ÑлеменÑа, ÑвлÑÑÑийÑÑ Ð¿ÑоÑÑÑм ÑиÑлом (либо возвÑаÑÐ°ÐµÑ -1, еÑли в маÑÑиве Ð½ÐµÑ Ð¿ÑоÑÑÑÑ ÑиÑел).
function isPrime(element, index, array) {
var start = 2;
while (start <= Math.sqrt(element)) {
if (element % start++ < 1) {
return false;
}
}
return element > 1;
}
console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, не найдено
console.log([4, 6, 7, 12].findIndex(isPrime)); // 2
ÐолиÑил
ÐÑÐ¾Ñ Ð¼ÐµÑод бÑл добавлен в ÑпеÑиÑикаÑии ECMAScript 6 и пока Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпен во вÑÐµÑ ÑеализаÑиÑÑ JavaScript. Ðднако, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑледÑÑÑий кÑÑоÑек кода в каÑеÑÑве полиÑила:
if (!Array.prototype.findIndex) {
Array.prototype.findIndex = function (predicate) {
if (this == null) {
throw new TypeError(
"Array.prototype.findIndex called on null or undefined",
);
}
if (typeof predicate !== "function") {
throw new TypeError("predicate must be a function");
}
var list = Object(this);
var length = list.length >>> 0;
var thisArg = arguments[1];
var value;
for (var i = 0; i < length; i++) {
value = list[i];
if (predicate.call(thisArg, value, i, list)) {
return i;
}
}
return -1;
};
}
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.findindex> |