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 が返され、配列は検索されません。
[編集] 説明
lastIndexOf は searchElement と配列の要素を 厳密な同値 (三重イコール演算子 === で使われるのと同じ方法) を使って比較します。
[編集] 互換性
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 メソッドとは異なります。