Array.prototype.findLastIndex()
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с августа 2022 года.
Метод findLastIndex() экземпляров Array перебирает массив в обратном порядке и возвращает индекс первого элемента, который удовлетворяет предоставленной тестовой функции. Если ни один элемент не удовлетворяет тестовой функции, возвращается -1.
См. также метод findLast(), который возвращает значение последнего элемента, удовлетворяющего тестовой функции (вместо его индекса).
Попробуйте
const array = [5, 12, 50, 130, 44]; const isLargeNumber = (element) => element > 45; console.log(array.findLastIndex(isLargeNumber)); // Expected output: 3 // Index of element with value: 130
Синтаксис
findLastIndex(callbackFn) findLastIndex(callbackFn, thisArg)
Параметры
-
callbackFn - Функция, которую нужно выполнить для каждого элемента в массиве. Она должна возвращать истинное значение, чтобы указать на найденный совпадающий элемент, и ложное значение в противном случае. Функция вызывается со следующими аргументами:
-
element - Текущий элемент, обрабатываемый в массиве.
-
index - Индекс текущего элемента, обрабатываемого в массиве.
-
array - Массив, для которого был вызван
findLastIndex().
-
-
thisArgНеобязательно - Значение, используемое в качестве
thisпри выполненииcallbackFn. См. итерационные методы.
Возвращаемое значение
Индекс последнего (с наибольшим индексом) элемента в массиве, который прошел проверку. В противном случае -1, если совпадающий элемент не найден.
Описание
Метод findLastIndex() является итерационным методом. Он вызывает предоставленную функцию callbackFn один раз для каждого элемента в массиве в порядке убывания индексов, пока callbackFn не вернет истинное значение. Затем findLastIndex() возвращает индекс этого элемента и прекращает итерацию по массиву. Если callbackFn никогда не возвращает истинное значение, findLastIndex() возвращает -1. Прочтите раздел итерационные методы для получения дополнительной информации о том, как эти методы работают в целом.
callbackFn вызывается для каждого индекса массива, а не только для тех, которым присвоены значения. Пустые слоты в разреженных массивах ведут себя так же, как undefined.
Метод findLastIndex() является общим. Он ожидает, что значение 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, 12].findLastIndex(isPrime)); // -1, not found
console.log([4, 5, 7, 8, 9, 11, 12].findLastIndex(isPrime)); // 5
Примечание: реализация isPrime() предназначена только для демонстрации. Для реального приложения вам следует использовать сильно мемоизированный алгоритм, такой как решето Эратосфена, чтобы избежать повторных вычислений.
Использование третьего аргумента callbackFn
Аргумент array полезен, если вы хотите получить доступ к другому элементу в массиве, особенно если у вас нет существующей переменной, ссылающейся на массив. Следующий пример сначала использует filter() для извлечения положительных значений, а затем использует findLastIndex() для поиска последнего элемента, который меньше своих соседей.
const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const lastTrough = numbers
.filter((num) => num > 0)
.findLastIndex((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(lastTrough); // 6
Использование findLastIndex() на разреженных массивах
Вы можете искать undefined в разреженном массиве и получить индекс пустого слота.
console.log([1, , 3].findLastIndex((x) => x === undefined)); // 1
Вызов findLastIndex() на объектах, не являющихся массивами
Метод findLastIndex() считывает свойство length объекта this, а затем получает доступ к каждому свойству, ключ которого является неотрицательным целым числом, меньшим length.
const arrayLike = {
length: 3,
0: 2,
1: 7.3,
2: 4,
3: 3, // ignored by findLastIndex() since length is 3
};
console.log(
Array.prototype.findLastIndex.call(arrayLike, (x) => Number.isInteger(x)),
); // 2
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | Bun | Deno | Node.js | |
findLastIndex |
97 |
97 |
104 |
83 |
15.4 |
97 |
104 |
68 |
15.4 |
18.0 |
97 |
15.4 |
1.0.0 |
1.16 |
18.0.0 |
См. также
- Polyfill для
Array.prototype.findLastIndexвcore-js - Polyfill
Array.prototype.findLastIndexиз es-shims - Руководство по индексированным коллекциям
ArrayArray.prototype.find()Array.prototype.findIndex()Array.prototype.findLast()Array.prototype.indexOf()Array.prototype.lastIndexOf()TypedArray.prototype.findLastIndex()
© 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/findLastIndex