JavaScript метод findIndex()
Определение и применение
JavaScript метод findIndex() возвращает индекс первого элемента в массиве, который соответствует условию
в переданной функции, или -1, если ни один элемент не удовлетворяет условию в переданной функции. Работу
метода показывает пример
«Как найти индекс подходящего элемента».
Диапазон элементов, обрабатываемых с помощью метода findIndex() устанавливается перед
первым вызовом функции обратного вызова. Элементы, добавленные за пределами исходной длины после начала
обхода, не посещаются. Значение по ещё не посещённому индексу внутри исходного диапазона читается в момент посещения.
Если значения существующих элементов массива изменяются в момент выполнения, то в качестве передаваемого значения
функции будет значение в тот момент времени, когда метод findIndex() посещает их.
thisValue задаёт this при вызове обычной функции обратного вызова. Стрелочная функция
использует this из внешней области и игнорирует этот аргумент. Сравните
пример с thisValue.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2016 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
findIndex | 45 | 12 | 25 | 32 | 8 | 45 | 4 | 32 | 8 | 5.0 | 45 | 8 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
array.findIndex(callback);
array.findIndex(callback, thisValue);Спецификация
ECMAScript: Array.prototype.findIndex.
Значения параметров
| Параметр | Описание |
|---|---|
callback |
Функция проверки, результат которой преобразуется в логическое значение. Метод завершает обход при первом
истинном результате. Функция принимает следующие параметры:
Если в качестве параметра метода передается что-то, что не является объектом функции, то будет вызвано
исключение |
thisValue |
Значение, на которое может ссылаться ключевое слово this внутри функции обратного вызова. Если
параметр thisValue не используется, то в качестве значения this будет использоваться
undefined (в конечном счете this будет зависеть от обычных правил контекста
выполнения функции). Необязательный параметр.
|
Возвращаемое значение
Индекс первого подходящего элемента или -1. Индекс 0 — корректный результат, поэтому проверяйте результат через !== -1.
Особенности
Пустые позиции и удалённые до посещения элементы посещаются как undefined, если значение не найдено в
цепочке прототипов. Результат функции преобразуется в логическое значение. Сам метод массив не изменяет; функция может
это делать.
Проверьте это поведение в примере Как найти индекс пустой позиции.
Примеры, попробуйте сами
Как найти индекс подходящего элемента
Измените искомое число и запустите код. Сравните индекс совпадения и результат -1.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
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
<p>Результат выполнения выводится в консоль.</p>
main.js
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 lang="ru">
<head>
<meta charset="utf-8" />
<title>Как найти индекс пустой позиции</title>
</head>
<body></body>
</html>
main.js
const values = [1, , 3]
const foundIndex = values.findIndex((value) => value === undefined)
console.log('Индекс:', foundIndex)
console.log('Есть элемент:', foundIndex in values)