findLastIndex() ищет индекс последнего элемента массива, который подходит под условие.
Это почти тот же findIndex(), только поиск идёт не слева направо, а справа налево.
Синтаксис
array.findLastIndex(callback)
array.findLastIndex(callback, thisArg)
callback - функция, которая проверяет каждый элемент массива.
Что делает findLastIndex()
Метод проходит по массиву с конца к началу и вызывает callback для каждого элемента.
Если callback возвращает true, метод считает элемент найденным и возвращает его индекс.
const numbers = [5, 12, 8, 130];
const result = numbers.findLastIndex((value) => value > 10);
console.log(result); // 3
Здесь индекс 3, потому что поиск шёл с конца, и первым подходящим справа оказался 130.
Что возвращает findLastIndex()
findLastIndex() возвращает:
- индекс последнего подходящего элемента, если он найден
-1, если ничего не найдено
const numbers = [1, 2, 3];
console.log(numbers.findLastIndex((value) => value > 1)); // 2
console.log(numbers.findLastIndex((value) => value > 10)); // -1
Это главное, что стоит запомнить про метод.
Аргументы callback
Callback в findLastIndex() может получать до трёх аргументов:
array.findLastIndex((element, index, array) => {
// ...
});
element- текущий элементindex- индекс текущего элементаarray- сам исходный массив
Пример:
const fruits = ["apple", "banana", "orange"];
const result = fruits.findLastIndex((fruit, index) => {
return index < 2;
});
console.log(result); // 1
Поиск объекта по условию
findLastIndex() удобно использовать, когда нужно найти позицию последнего подходящего объекта.
const users = [
{ id: 1, name: "Anna" },
{ id: 2, name: "Ivan" },
{ id: 3, name: "Ivan" },
];
const index = users.findLastIndex((item) => item.name === "Ivan");
console.log(index); // 2
Это особенно полезно, если потом нужно обновить или удалить именно последнее совпадение.
findLastIndex() останавливается на первом совпадении справа
Как только найден подходящий элемент при движении с конца, поиск сразу прекращается.
const numbers = [2, 4, 6, 8];
const result = numbers.findLastIndex((value) => value > 3);
console.log(result); // 3
Хотя 6 и 4 тоже подходят, метод вернёт только индекс первого совпадения справа.
findLastIndex() и findLast()
Эти методы отличаются тем, что именно они возвращают.
const numbers = [10, 20, 30, 20];
console.log(numbers.findLast((value) => value === 20)); // 20
console.log(numbers.findLastIndex((value) => value === 20)); // 3
findLast() возвращает сам элемент.
findLastIndex() возвращает его индекс.
findLastIndex() и findIndex()
Эти методы отличаются направлением поиска.
const numbers = [10, 20, 30, 20];
console.log(numbers.findIndex((value) => value === 20)); // 1
console.log(numbers.findLastIndex((value) => value === 20)); // 3
findIndex() ищет слева направо.
findLastIndex() ищет справа налево.
findLastIndex() не меняет исходный массив
Метод только ищет индекс и не изменяет массив.
const numbers = [1, 2, 3];
const result = numbers.findLastIndex((value) => value === 2);
console.log(numbers); // [1, 2, 3]
console.log(result); // 1
Пустые слоты
findLastIndex() проходит и по пустым слотам массива, где значение будет undefined.
const arr = Array(3);
const result = arr.findLastIndex((value) => value === undefined);
console.log(result); // 2
Это важно помнить при работе с массивами, созданными через Array(length).
Когда это полезно
findLastIndex() удобно использовать, когда:
- нужен индекс последнего подходящего элемента
- поиск нужно вести с конца массива
- потом планируется обновление или удаление по найденному индексу
Пример:
const logs = [
{ level: "info" },
{ level: "error" },
{ level: "info" },
{ level: "error" },
];
const index = logs.findLastIndex((item) => item.level === "error");
console.log(index); // 3
Частые ошибки
Думать, что findLastIndex() возвращает элемент
const numbers = [1, 2, 3, 4];
const result = numbers.findLastIndex((value) => value > 2);
console.log(result); // 3
Это индекс, а не значение 4.
Путать findLastIndex() и findIndex()
const numbers = [1, 2, 3, 2];
console.log(numbers.findIndex((value) => value === 2)); // 1
console.log(numbers.findLastIndex((value) => value === 2)); // 3
Здесь разница именно в направлении поиска.
Забывать, что при отсутствии результата будет -1
const numbers = [1, 2, 3];
console.log(numbers.findLastIndex((value) => value > 10)); // -1
Это нормальный результат, а не ошибка.
Быстрая памятка
findLastIndex()возвращает индекс последнего элемента, подходящего под условие- поиск идёт справа налево
- если ничего не найдено, метод вернёт
-1 - callback может получать
element,indexиarray findLast()возвращает элемент, аfindLastIndex()- индекс
Коротко
findLastIndex() - это удобный способ найти индекс последнего подходящего элемента массива. Главное, что стоит запомнить: метод ищет с конца и возвращает именно индекс, а не сам элемент.