Array.prototype.lastIndexOf()

이 페이지에 스크립팅 오류가 있습니다. 오류가 사이트 편집자에 의해 처리되는 동안, 아래에 있는 부분 콘텐츠만 볼 수 있습니다.

현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

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

var a = [2, 5, 9, 2];
a.lastIndexOf(2); // 3
a.lastIndexOf(7); // -1

Syntax

arr.lastIndexOf(searchElement)
arr.lastIndexOf(searchElement, fromIndex)

Parameters

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

Return value

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

Description

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

Examples

Using 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 메소드와 다릅니다.

Polyfill

lastIndexOf는 5 판에서 ECMA-262 표준에 추가되었습니다. 이 표준의 다른 구현에는 존재하지 않을 수도 있습니다. 스크립트의 시작 부분에 다음 코드를 삽입하여이를 지원함으로써 네이티브 메소드를 지원하지 않는 구현에서 lastIndexOf를 사용할 수 있습니다. 이 알고리즘은 Object, TypeError, Number, {{ {jsxref }}는 원래 값을가집니다. Math.floor, Math.abs

// 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와의 절대적인 호환성을 목표로합니다. 여기에는 논란의 여지가있는 몇 가지 사례가 포함됩니다. 실제 응용 프로그램에서이 기능을 사용하려는 경우이 경우를 무시하면 덜 복잡한 코드로 계산할 수 있습니다.

Specifications

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 2017 Draft (ECMA-262)
The definition of 'Array.prototype.lastIndexOf' in that specification.
Draft  

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) 9 (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Compatibility notes

  • Starting with Firefox 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44),  this method will no longer return -0. For example, [0].lastIndexOf(0, -0) will now always return +0 (bug 1242043).

See also

문서 태그 및 공헌자

 이 페이지의 공헌자: imskojs
 최종 변경: imskojs,