С недавних пор в JavaScript появились два полезных метода для массивов: findLast
и findLastIndex
. Они делают то же, что и привычные find
и findIndex
, только проходят массив с конца.
Зачем это нужно
Когда мы используем find
, массив перебирается слева направо. Это нормально, но бывает, что нужный элемент находится ближе к концу. В таких случаях find
всё равно обходит весь массив до тех пор, пока не дойдёт до нужного значения.
Если массив большой, а элемент — где-то в конце, это лишняя работа. findLast
решает эту проблему: он начинает перебор с конца и останавливается на первом подходящем элементе. Это может быть быстрее и экономнее по ресурсам.
То же самое касается findLastIndex
, только он возвращает индекс найденного элемента, а не сам элемент.
Примеры
const arr = [0, 1, 2, 3, 7];
// find — идёт с начала
const res = arr.find(el => {
console.log('Поиск');
return el === 7;
});
// В консоли будет 5 раз "Поиск"
// findLast — идёт с конца
const res2 = arr.findLast(el => {
console.log('Поиск');
return el === 7;
});
// В консоли — 1 раз "Поиск"
Если в массиве несколько одинаковых значений, find
и findLast
вернут разные результаты:
const arr = [1, 2, 3, 4, 2];
arr.find(x => x === 2); // 1-й элемент — 2
arr.findLast(x => x === 2); // последний — 2
То же касается findIndex и findLastIndex:
arr.findIndex(x => x === 2); // 1
arr.findLastIndex(x => x === 2); // 4
Когда использовать
- Если вы точно знаете, что нужный элемент — ближе к концу.
- Если вам важна производительность при работе с большими массивами.
- Если хотите получить последний подходящий элемент, а не первый.
Всё просто: если find
нужен для поиска начала, findLast
— для конца.
Совместимость
Методы findLast
и findLastIndex
появились в ECMAScript 2022 и вошли в Baseline в статусе Widely available в феврале 2025. Это значит, что сейчас поддержка новых методов есть во всех современных браузерах.
Проверка на поддержку в старых браузерах:
if (typeof [].findLast === 'function') {
// Можно использовать
}