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