Array.prototype.lastIndexOf()

lastIndexOf() 메서드는 지정된 요소가 배열에서 발견 될 수있는 마지막 인덱스를 반환하고, 존재하지 않으면 -1을 반환합니다. 배열은 fromIndex에서 시작하여 뒤로 검색됩니다.

구문

arr.lastIndexOf(searchElement[, fromIndex])

매개변수

searchElement
배열에서 찾을 요소입니다.
fromIndex Optional
거꾸로 검색을 시작하는 인덱스입니다. 배열의 길이에서 1을 뺀 값 (arr.length - 1)을 기본값으로합니다. 즉, 전체 배열이 검색됩니다. 인덱스가 배열의 길이보다 크거나 같으면 전체 배열이 검색됩니다. 부의 경우는, 배열의 마지막으로부터의 오프셋 (offset)로서 받아 들여집니다. 인덱스가 음수 일지라도 배열은 계속해서 앞뒤로 검색됩니다. 계산 된 인덱스가 0보다 작은 경우 -1이 반환됩니다. 즉, 배열이 검색되지 않습니다.

반환 값

배열의 요소의 마지막 인덱스입니다. 발견되지 않으면 -1.

설명

lastIndexOf는 엄격한 동등성을 사용하여 검색 요소를 Array의 요소와 비교합니다 (=== 또는 triple-equals 연산자에서 사용하는 것과 같은 메서드).

예제

lastIndexOf 사용하기

다음 예제에서는 lastIndexOf를 사용하여 배열의 값을 찾습니다.

var array = [2, 5, 9, 2];
array.lastIndexOf(2);     // 3
array.lastIndexOf(7);     // -1
array.lastIndexOf(2, 3);  // 3
array.lastIndexOf(2, 2);  // 0
array.lastIndexOf(2, -2); // 0
array.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]

배열의 첫 번째 요소 인 경우 요소가 fromIndex 매개 변수와 관계없이 항상 발견되므로 idx == 0 사례를 여기에서 개별적으로 처리해야합니다. 이는 indexOf 메소드와 다릅니다.

폴리필

// 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;
  };
}

다시 말하지만,이 구현은 Firefox 및 SpiderMonkey JavaScript 엔진의 lastIndexOf와의 절대적인 호환성을 목표로합니다. 여기에는 논란의 여지가있는 몇 가지 사례가 포함됩니다. 실제 응용 프로그램에서이 기능을 사용하려는 경우이 경우를 무시하면 덜 복잡한 코드로 계산할 수 있습니다.

명세

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
The definition of 'Array.prototype.lastIndexOf' in that specification.
Standard Initial definition. Implemented in 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 YesEdge Full support 12Firefox Full support 1.5IE Full support 9Opera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes

Legend

Full support  
Full support

같이 보기