Array.prototype.findIndex()
Baseline Широко доступен
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2016 года.
Метод findIndex() экземпляров Array возвращает индекс первого элемента в массиве, который соответствует предоставленной тестовой функции. Если ни один элемент не соответствует тестовой функции, возвращается -1.
См. также метод find(), который возвращает первый элемент, соответствующий тестовой функции (а не его индекс).
Попробуйте
const array = [5, 12, 8, 130, 44]; const isLargeNumber = (element) => element > 13; console.log(array.findIndex(isLargeNumber)); // Expected output: 3
Синтаксис
findIndex(callbackFn) findIndex(callbackFn, thisArg)
Параметры
-
callbackFn - Функция, которая будет выполнена для каждого элемента в массиве. Она должна возвращать истинное (truthy) значение, чтобы указать на найденное совпадение, и ложное (falsy) значение в противном случае. Функция вызывается со следующими аргументами:
-
element - Текущий элемент, обрабатываемый в массиве.
-
index - Индекс текущего элемента, обрабатываемого в массиве.
-
array - Массив, для которого был вызван
findIndex().
-
-
thisArgНеобязательный - Значение, используемое как
thisпри выполненииcallbackFn. См. итерационные методы.
Возвращаемое значение
Индекс первого элемента в массиве, который прошел проверку. В противном случае — -1.
Описание
Метод findIndex() является итерационным методом. Он вызывает предоставленную функцию callbackFn один раз для каждого элемента в массиве в порядке возрастания индексов, пока callbackFn не вернет истинное (truthy) значение. Затем findIndex() возвращает индекс этого элемента и прекращает итерацию по массиву. Если callbackFn никогда не возвращает истинное значение, findIndex() возвращает -1. Читайте раздел итерационные методы для получения дополнительной информации о том, как эти методы работают в целом.
callbackFn вызывается для *каждого* индекса массива, а не только для тех, которым присвоены значения. Пустые слоты в разреженных массивах ведут себя так же, как undefined.
Метод findIndex() является общим. Он ожидает, что значение this будет иметь свойство length и целочисленные свойства.
Примеры
Найти индекс первого простого числа в массиве
Следующий пример возвращает индекс первого элемента в массиве, который является простым числом, или -1, если простых чисел нет.
function isPrime(n) {
if (n < 2) {
return false;
}
if (n % 2 === 0) {
return n === 2;
}
for (let factor = 3; factor * factor <= n; factor += 2) {
if (n % factor === 0) {
return false;
}
}
return true;
}
console.log([4, 6, 8, 9, 12].findIndex(isPrime)); // -1, not found
console.log([4, 6, 7, 9, 12].findIndex(isPrime)); // 2 (array[2] is 7)
Примечание: Реализация isPrime() предназначена только для демонстрации. Для реального приложения вы захотите использовать сильно мемоизированный алгоритм, такой как решето Эратосфена, чтобы избежать повторных вычислений.
Использование третьего аргумента callbackFn
Аргумент array полезен, если вы хотите получить доступ к другому элементу в массиве, особенно когда у вас нет существующей переменной, ссылающейся на массив. Следующий пример сначала использует filter() для извлечения положительных значений, а затем использует findIndex() для поиска первого элемента, который меньше своих соседей.
const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const firstTrough = numbers
.filter((num) => num > 0)
.findIndex((num, idx, arr) => {
// Without the arr argument, there's no way to easily access the
// intermediate array without saving it to a variable.
if (idx > 0 && num >= arr[idx - 1]) return false;
if (idx < arr.length - 1 && num >= arr[idx + 1]) return false;
return true;
});
console.log(firstTrough); // 1
Использование findIndex() на разреженных массивах
Вы можете искать undefined в разреженном массиве и получить индекс пустого слота.
console.log([1, , 3].findIndex((x) => x === undefined)); // 1
Вызов findIndex() на объектах, не являющихся массивами
Метод findIndex() считывает свойство length this, а затем получает доступ к каждому свойству, ключ которого является неотрицательным целым числом, меньшим length.
const arrayLike = {
length: 3,
"-1": 0.1, // ignored by findIndex() since -1 < 0
0: 2,
1: 7.3,
2: 4,
};
console.log(
Array.prototype.findIndex.call(arrayLike, (x) => !Number.isInteger(x)),
); // 1
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | Bun | Deno | Node.js | |
findIndex |
45 |
12 |
25 |
32 |
8 |
45 |
4 |
32 |
8 |
5.0 |
45 |
8 |
1.0.0 |
1.0 |
4.0.0 |
См. также
- Polyfill для
Array.prototype.findIndexвcore-js - Polyfill es-shims для
Array.prototype.findIndex - Руководство по индексированным коллекциям
ArrayArray.prototype.find()Array.prototype.findLast()Array.prototype.findLastIndex()Array.prototype.indexOf()Array.prototype.lastIndexOf()TypedArray.prototype.findIndex()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex