Array.prototype.lastIndexOf()

Метод lastIndexOf() повертає останній індекс, за яким заданий елемент було знайдено у масиві, або -1, якщо елемент не знайдено. Пошук відбувається в зворотному порядку, починаючи з індексу fromIndex.

Синтаксис

arr.lastIndexOf(searchElement[, fromIndex])

Параметри

searchElement
Елемент, який потрібно знайти у масиві.
fromIndex Optional
Індекс, з якого починається пошук у зворотному порядку. За замовченням дорівнює довжині масиву мінус один (arr.length - 1), тобто пошук відбуватиметься у всьому масиві. Якщо індекс більше або дорівнює довжині масиву, пошук відбуватиметься у всьому масиві. Якщо індекс є від'ємним, він вважається відступом від кінця масиву. Зверніть увагу, що навіть якщо індекс є від'ємним, пошук все одно відбувається з кінця масиву. Якщо обчислений індекс є від'ємним, повертається -1, тобто пошук не відбувається.

Значення, яке повертається

Останній індекс елемента у масиві; -1, якщо елемент не знайдений.

Опис

Метод lastIndexOf порівнює searchElement з елементами масиву, використовуючи строгу рівність (метод, що використовує оператор === або потрійне дорівнює).

Приклади

Використання lastIndexOf

Наступний приклад використовує lastIndexOf, щоб знайти значення у масиві.

var numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2);     // 3
numbers.lastIndexOf(7);     // -1
numbers.lastIndexOf(2, 3);  // 3
numbers.lastIndexOf(2, 2);  // 0
numbers.lastIndexOf(2, -2); // 0
numbers.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 у реалізаціях, які не підтримують його початково. Цей алгоритм є саме тим, що зазначений у 5-й версії ECMA-262, за умови, що Object, TypeError, Number, Math.floor, Math.abs та Math.min мають свої початкові значення.

// Функціональні кроки ECMA-262, версії 5, 15.4.4.15
// Довідка: http://es5.github.io/#x15.4.4.15
if (!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 менш складним кодом, якщо знехтуєте цими ситуаціями.

Специфікації

Специфікація Статус Коментар
ECMAScript 5.1 (ECMA-262)
The definition of 'Array.prototype.lastIndexOf' in that specification.
Standard Початкове визначення. Реалізоване у JavaScript 1.6.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.lastIndexOf' in that specification.
Standard
ECMAScript Latest Draft (ECMA-262)
The definition of 'Array.prototype.lastIndexOf' in that specification.
Draft

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
lastIndexOfChrome Full support 1Edge Full support 12Firefox Full support 1.5IE Full support 9Opera Full support YesSafari Full support YesWebView Android Full support ≤37Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes

Legend

Full support  
Full support

Примітки щодо сумісності

  • Починаючи з Firefox 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44), цей метод більше не повертатиме -0. Для прикладу, [0].lastIndexOf(0, -0) тепер завжди повертатиме +0 (bug 1242043).

Див. також