LastIndexOf: примеры (JAVASCRIPT)

Использование lastIndexOf для поиска в JavaScript
Раздел: Массивы, Поиск
lastIndexOf(searchElement, fromIndex?): number

Основы функции lastIndexOf

Метод lastIndexOf() возвращает последний индекс, по которому заданный элемент найден в массиве или подстрока в строке. Поиск выполняется от конца к началу. Функция применяется, когда требуется найти последнее вхождение элемента.

Синтаксис для строк и массивов одинаков: lastIndexOf(searchElement[, fromIndex]).

Первый аргумент searchElement - искомое значение.

Второй необязательный аргумент fromIndex - индекс, с которого начинается поиск в обратном направлении. Для массивов поиск идет от индекса fromIndex до нуля. Для строк - от индекса fromIndex до начала строки. Если аргумент опущен, поиск начинается с последнего элемента.

Метод возвращает числовой индекс последнего вхождения или -1, если элемент не найден.

Примеры использования

Пример с массивом чисел:

const numbers = [2, 5, 9, 2, 5];
console.log(numbers.lastIndexOf(2));
console.log(numbers.lastIndexOf(7));
console.log(numbers.lastIndexOf(2, 2));
3
-1
0

Пример со строкой:

const str = 'В лесу росла ель, в лесу';
console.log(str.lastIndexOf('лесу'));
console.log(str.lastIndexOf('Лесу'));
console.log(str.lastIndexOf('лесу', 10));
15
-1
5

Использование отрицательного fromIndex:

const arr = ['a', 'b', 'c', 'a'];
console.log(arr.lastIndexOf('a', -2));
0

Похожие функции в JavaScript

indexOf() выполняет поиск первого вхождения элемента, начиная с начала. Метод findLastIndex() для массивов находит индекс последнего элемента, удовлетворяющего условию функции-предиката. Для строк существует метод search(), который ищет первое совпадение с регулярным выражением.

Функцию lastIndexOf() предпочтительно использовать для простого поиска последнего вхождения конкретного значения. Для сложных условий поиска в массивах подходит findLastIndex().

Распространенные ошибки

Путаница с регистром символов в строках:

console.log('JavaScript'.lastIndexOf('script'));
-1

Некорректное понимание отрицательного fromIndex:

const arr = [1, 2, 3];
console.log(arr.lastIndexOf(1, -10));
-1

Поиск в массиве объектов по ссылке, а не по значению:

const obj = {id: 1};
const arr = [{id: 1}, obj, {id: 1}];
console.log(arr.lastIndexOf({id: 1}));
console.log(arr.lastIndexOf(obj));
-1
1

Изменения в последних версиях

Метод lastIndexOf() остается неизменным в стандарте ECMAScript. В ECMAScript 2023 для массивов добавлен метод findLastIndex(), который предлагает альтернативный способ поиска, но не заменяет lastIndexOf.

Расширенные примеры

Поиск всех вхождений с конца:

Пример javascript
const str = 'охота на охоту';
let pos = str.lastIndexOf('охота');
while (pos !== -1) {
  console.log(`Найдено на позиции: ${pos}`);
  pos = str.lastIndexOf('охота', pos - 1);
}
Найдено на позиции: 8
Найдено на позиции: 0

Использование с массивами, содержащими undefined:

Пример javascript
const arr = [2, undefined, null, undefined, 2];
console.log(arr.lastIndexOf(undefined));
console.log(arr.lastIndexOf(null));
3
2

Поиск в части массива с использованием fromIndex:

Пример javascript
const data = [0, 1, 2, 1, 0, 1, 2];
const searchStart = 4;
console.log(data.lastIndexOf(1, searchStart));
3

Сравнение с indexOf для одного и того же массива:

Пример javascript
const items = ['яблоко', 'груша', 'яблоко', 'апельсин'];
console.log('Первое вхождение:', items.indexOf('яблоко'));
console.log('Последнее вхождение:', items.lastIndexOf('яблоко'));
Первое вхождение: 0
Последнее вхождение: 2

Аналоги в других языках

В PHP для строк используется функция strrpos():

echo strrpos('в лесу росла ель', 'лесу');
5

В Python для строк и списков применяют метод rfind() или rindex():

s = 'в лесу росла ель'
print(s.rfind('лесу'))
5

В MySQL функция LOCATE() с реверсом строки или INSTR():

SELECT LENGTH('в лесу росла ель') - LOCATE('лесу', REVERSE('в лесу росла ель')) - LENGTH('лесу') + 2;
5

В C для строк в библиотеке string.h есть функция strrchr(), которая ищет последнее вхождение символа.

JS lastIndexOf function comments

En
LastIndexOf Returns the last index at which a given element can be found in the array/string