Spec-Zone.ru › JavaScript

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

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

Спецификация
Спецификация языка ECMAScript® 2027
# sec-array.prototype.findlastindex

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
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
  • Руководство по индексированным коллекциям
  • Array
  • Array.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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API