Visit Mozilla.org

Core JavaScript 1.5 Reference:Global Objects:Array:lastIndexOf

出典: MDC


目次

[編集] 概要

配列中で与えられた要素が見つけられた最後の添字を返します。もし存在しなければ -1 を返します。配列は fromIndex から逆向きに検索されます。

Array のメソッド
実装されたバージョン: JavaScript 1.6 (Gecko 1.8b2 以降)
ECMA バージョン: なし

[編集] 構文

var index = array.lastIndexOf(searchElement[, fromIndex]);

[編集] 引数

searchElement 
配列中の位置を探す要素。
fromIndex 
逆向きに検索し始める添字。デフォルトは配列の長さの値で、つまり配列全体が検索されます。もしこの添字が配列の長さ以上ならば、配列全体が検索されます。負の数の場合、これは配列の終わりからのオフセットとみなされます。この添字が負の数であってもなお、配列は後ろから前に検索されることに注意してください。負の添え字の絶対値が配列の長さを超えた場合、-1 が返され、配列は検索されません。

[編集] 説明

lastIndexOfsearchElement と配列の要素を 厳密な同値 (三重イコール演算子 === で使われるのと同じ方法) を使って比較します。

[編集] 互換性

lastIndexOf は ECMA-262 標準の JavaScript 拡張であり、ECMA-262 標準の他の実装では存在しないかもしれません。回避策として、以下のコードをあなたのスクリプトの先頭に挿入することにより、ネイティブではサポートしていない ECMA-262 実装で lastIndexOf が使用できるようになります。このアルゴリズムはまさに Firefox および SpiderMonkey で使われているものです。

if (!Array.prototype.lastIndexOf)
{
  Array.prototype.lastIndexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]);
    if (isNaN(from))
    {
      from = len - 1;
    }
    else
    {
      from = (from < 0)
           ? Math.ceil(from)
           : Math.floor(from);
      if (from < 0)
        from += len;
      else if (from >= len)
        from = len - 1;
    }

    for (; from > -1; from--)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

この実装は Firefox および SpiderMonkey の JavaScript エンジンにある lastIndexOf との完全な互換性を目的としたものであり、いくつかの議論の余地のある境界のケースに備えてもいることに注意してください。もしこれを実社会のアプリケーションで使うつもりならば、それらの場合を無視してより単純なコードで from を計算できるかもしれません。

[編集]

[編集] 例: lastIndexOf を使う

以下の例は lastIndexOf を使って配列中のある値の位置を探しています。

var array = [2, 5, 9, 2];
var index = array.lastIndexOf(2);
// index is 3
index = array.lastIndexOf(7);
// index is -1
index = array.lastIndexOf(2, 3);
// index is 3
index = array.lastIndexOf(2, 2);
// index is 0
index = array.lastIndexOf(2, -2);
// index is 0
index = array.lastIndexOf(2, -1);
// index is 3

[編集] 例: ある要素の存在をすべて見つける

以下の例は lastIndexOf を使って、与えられた配列中のある値の添字すべてを探しています。push を使って、値が見つかるたび別の配列にその添字を追加しています。

var indices = [];
var idx = array.lastIndexOf(element);
while (idx != -1)
{
  indices.push(idx);
  idx = (idx > 0 ? array.lastIndexOf(element, idx - 1) : -1);
}

ここで idx == 0 の場合を分けて扱わないといけないことに注意してください。なぜなら、もし検索する値が配列の最初の要素にあると、その値は fromIndex パラメータにかかわらずいつもヒットしてしまうのです。これは indexOf メソッドとは異なります。

[編集] 参照

indexOf