JavaScript метод findIndex()

Определение и применение

JavaScript метод findIndex() возвращает индекс первого элемента в массиве, который соответствует условию в переданной функции, или -1, если ни один элемент не удовлетворяет условию в переданной функции. Работу метода показывает пример «Как найти индекс подходящего элемента».

Диапазон элементов, обрабатываемых с помощью метода findIndex() устанавливается перед первым вызовом функции обратного вызова. Элементы, добавленные за пределами исходной длины после начала обхода, не посещаются. Значение по ещё не посещённому индексу внутри исходного диапазона читается в момент посещения.

Если значения существующих элементов массива изменяются в момент выполнения, то в качестве передаваемого значения функции будет значение в тот момент времени, когда метод findIndex() посещает их.

thisValue задаёт this при вызове обычной функции обратного вызова. Стрелочная функция использует this из внешней области и игнорирует этот аргумент. Сравните пример с thisValue.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2016 года.

Показать браузеры
Совместимостьjavascript.builtins.Array.findIndex
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
findIndex✓45✓12✓25✓32✓8✓45✓4✓32✓8✓5.0✓45✓8

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
array.findIndex(callback);
array.findIndex(callback, thisValue);

Спецификация

ECMAScript: Array.prototype.findIndex.

Значения параметров

Параметры findIndex()
Параметр Описание
callback Функция проверки, результат которой преобразуется в логическое значение. Метод завершает обход при первом истинном результате. Функция принимает следующие параметры:
  • currentValue - значение текущего элемента
  • index - индекс массива текущего элемента.
  • arr - массив, к которому принадлежит текущий элемент (по которому происходит проход).

Если в качестве параметра метода передается что-то, что не является объектом функции, то будет вызвано исключение TypeError. Обязательный параметр.

thisValue Значение, на которое может ссылаться ключевое слово this внутри функции обратного вызова. Если параметр thisValue не используется, то в качестве значения this будет использоваться undefined (в конечном счете this будет зависеть от обычных правил контекста выполнения функции). Необязательный параметр.

Возвращаемое значение

Индекс первого подходящего элемента или -1. Индекс 0 — корректный результат, поэтому проверяйте результат через !== -1.

Особенности

Пустые позиции и удалённые до посещения элементы посещаются как undefined, если значение не найдено в цепочке прототипов. Результат функции преобразуется в логическое значение. Сам метод массив не изменяет; функция может это делать.

Проверьте это поведение в примере Как найти индекс пустой позиции.

Примеры, попробуйте сами

Как найти индекс подходящего элемента

Измените искомое число и запустите код. Сравните индекс совпадения и результат -1.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
var array = [1, -2, 3, -4] // инициализируем переменную, содержащую массив числовых значений

console.log(
    array.findIndex(
        // находим индекс необходимого элемента в массиве
        function checkNumber(currentValue) {
            return currentValue == 3 // проверяем является ли текущее значение равное трем
        } // если условие выполняется, то возвращаем индекс этого элемента, если достигнут конец массива, то -1
    )
) // возвращаемое значение 2

// аналогично с использованием стрелочной функции
console.log(array.findIndex((currentValue) => currentValue == 3)) // возвращаемое значение  2
console.log(array.findIndex((currentValue) => currentValue == -3)) // возвращаемое значение -1

Как использовать thisValue в findIndex()

В следующем примере мы рассмотрим использование второго аргумента метода findIndex(), который указывает на объект, на который мы можем ссылаться с использованием ключевого слова this внутри функции обратного вызова: Измените метод объекта и запустите код. Сравните результат; замените обычную callback-функцию стрелочной и проверьте, почему thisValue перестаёт задавать this.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
var numbers = [1, -2, 3, -4] // инициализируем переменную, содержащую массив числовых значений
var myObject = {
    // инициализируем переменную, содержащую объект
    checkNumber: function (currentValue) {
        // метод объекта, который принимает значение
        return currentValue == 3 // проверяем является ли текущее значение равное трем
    },
}

console.log(
    numbers.findIndex(
        // находим индекс необходимого элемента в массиве
        function (currentValue) {
            return this.checkNumber(currentValue) //  возвращаемое значение метода checkNumber объекта myObject
        },
        myObject // объект, на который мы ссылаемся с использованием ключевого слова this
    )
) // если условие выполняется, то возвращаем индекс этого элемента, если достигнут конец массива, то -1
// возвращаемое значение 2

Как найти индекс пустой позиции

Заполните пустую позицию числом или undefined. Сравните найденный индекс и проверку наличия элемента.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="utf-8" />
    <title>Как найти индекс пустой позиции</title>
  </head>
  <body></body>
</html>
main.js
JavaScript
const values = [1, , 3]
const foundIndex = values.findIndex((value) => value === undefined)
console.log('Индекс:', foundIndex)
console.log('Есть элемент:', foundIndex in values)