Array.prototype.lastIndexOf()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
МетодlastIndexOf()
возвращает последний индекс, по которому данный элемент может быть найден в массиве или -1, если такого индекса нет. Массив просматривается от конца к началу, начиная с индексаfromIndex
.
Интерактивный пример
const animals = ["Dodo", "Tiger", "Penguin", "Dodo"];console.log(animals.lastIndexOf("Dodo"));// Expected output: 3console.log(animals.lastIndexOf("Tiger"));// Expected output: 1
Синтаксис
arr.lastIndexOf(searchElement[, fromIndex = arr.length])
Параметры
searchElement
Искомый элемент в массиве.
fromIndex
Необязательный параметр. Индекс, с которого начинать поиск в обратном направлении. Если индекс больше или равен длине массива, просматривается весь массив. Если индекс является отрицательным числом, он трактуется как смещение с конца массива. Обратите внимание: если индекс отрицателен, массив всё равно просматривается от конца к началу. Если рассчитанный индекс оказывается меньше 0, массив даже не просматривается. Значение по умолчанию равно длине массива, что означает, что просматривается весь массив.
Описание
МетодlastIndexOf()
сравнивает искомый элементsearchElement
с элементами в массиве, используястрогое сравнение (тот же метод используется оператором===
, тройное равно).
Примеры
Пример: использованиеlastIndexOf()
В следующем примере методlastIndexOf()
используется для поиска значений в массиве.
var array = [2, 5, 9, 2];array.lastIndexOf(2); // 3array.lastIndexOf(7); // -1array.lastIndexOf(2, 3); // 3array.lastIndexOf(2, 2); // 0array.lastIndexOf(2, -2); // 0array.lastIndexOf(2, -1); // 3
Пример: нахождение всех вхождений элемента
В следующем примере методlastIndexOf()
используется для поиска всех индексов элемента в указанном массиве, которые с помощью методаpush()
добавляются в другой массив.
var indices = [];var array = ["a", "b", "a", "c", "a", "d"];var element = "a";var idx = array.lastIndexOf(element);while (idx != -1) { indices.push(idx); idx = idx > 0 ? array.lastIndexOf(element, idx - 1) : -1;}console.log(indices);// [4, 2, 0]
Обратите внимание, что мы обрабатываем случайidx == 0
отдельно, поскольку элемент всегда будет найден, независимо от параметраfromIndex
, если он является первым элементом в массиве. Этим он отличается от методаindexOf()
.
Полифил
МетодlastIndexOf()
был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использоватьlastIndexOf()
в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; он предполагает, чтоObject
,TypeError
,Number
,Math.floor()
,Math.abs()
иMath.min()
имеют свои первоначальные значения.
// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.15// Ссылка (en): http://es5.github.io/#x15.4.4.15// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.15if (!Array.prototype.lastIndexOf) { Array.prototype.lastIndexOf = function (searchElement /*, fromIndex*/) { "use strict"; if (this === void 0 || this === null) { throw new TypeError(); } var n, k, t = Object(this), len = t.length >>> 0; if (len === 0) { return -1; } n = len - 1; if (arguments.length > 1) { n = Number(arguments[1]); if (n != n) { n = 0; } else if (n != 0 && n != 1 / 0 && n != -(1 / 0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } } for (k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); k >= 0; k--) { if (k in t && t[k] === searchElement) { return k; } } return -1; };}
И снова обратите внимание, что данная реализация нацелена на абсолютную совместимость с методомlastIndexOf()
, реализованным в Firefox и движке JavaScript SpiderMonkey, включая несколько случаев, которые являются спорными крайними случаями. Если вы используете этот код в реальных приложениях, вы можете вычислять параметрfrom
менее сложным образом, игнорируя эти случаи.
Спецификации
Specification |
---|
ECMAScript® 2026 Language Specification # sec-array.prototype.lastindexof |
Совместимость с браузерами
Замечания по совместимости
- Начиная с Firefox 47, метод больше не будет возвращать
-0
. Например,[0].lastIndexOf(0, -0)
теперь всегда будет возвращать+0
(Firefox bug 1242043).