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.
Расширенные примеры
Поиск всех вхождений с конца:
const str = 'охота на охоту';
let pos = str.lastIndexOf('охота');
while (pos !== -1) {
console.log(`Найдено на позиции: ${pos}`);
pos = str.lastIndexOf('охота', pos - 1);
}Найдено на позиции: 8 Найдено на позиции: 0
Использование с массивами, содержащими undefined:
const arr = [2, undefined, null, undefined, 2];
console.log(arr.lastIndexOf(undefined));
console.log(arr.lastIndexOf(null));3 2
Поиск в части массива с использованием fromIndex:
const data = [0, 1, 2, 1, 0, 1, 2];
const searchStart = 4;
console.log(data.lastIndexOf(1, searchStart));3
Сравнение с indexOf для одного и того же массива:
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(), которая ищет последнее вхождение символа.