Array.prototype.findIndex()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
Сводка
МетодfindIndex()
возвращаетиндекс в массиве, если элемент удовлетворяет условию проверяющей функции. В противном случае возвращается -1.
Также смотрите методfind()
, который возвращаетзначение найденного в массиве элемента вместо его индекса.
Синтаксис
arr.findIndex(callback[, thisArg])
Параметры
Описание
Метод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® 2026 Language Specification # sec-array.prototype.findindex |