Core JavaScript 1.5 Reference:Global Objects:Array:indexOf
出典: MDC
目次 |
[編集] 概要
配列中で与えられた要素が見つけられた最初の添字を返します。もし存在しなければ -1 を返します。
| Array のメソッド | |
| 実装されたバージョン: | JavaScript 1.6 (Gecko 1.8b2 以降) |
| ECMA バージョン: | なし |
[編集] 構文
var index = array.indexOf(searchElement[, fromIndex]);
[編集] 引数
-
searchElement - 配列中の位置を探す要素。
-
fromIndex - 検索を始める添字。デフォルトは 0、つまり配列全体が検索されます。もしこの添字が配列の長さ以上だと、-1 か返され、配列は検索されません。負の数の場合、これは配列の終わりからのオフセットとみなされます。この添字が負の数であっても、配列は前から後ろに検索されることに注意してください。負の添え字の絶対値が配列の長さを超えた場合、配列全体が検索されます。
[編集] 説明
indexOf は searchElement と配列の要素を 厳密な同値 (三重イコール演算子 === で使われるのと同じ方法) を使って比較します。
[編集] 互換性
indexOf は ECMA-262 標準の JavaScript 拡張であり、ECMA-262 標準の他の実装では存在しないかもしれません。回避策として、以下のコードをあなたのスクリプトの先頭に挿入することにより、ネイティブではサポートしていない ECMA-262 実装で indexOf が使用できるようになります。このアルゴリズムはまさに Firefox および SpiderMonkey で使われているものです。
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
この実装は Firefox および SpiderMonkey の JavaScript エンジンにある indexOf との完全な互換性を目的としたものであり、indexOf に渡された添字が整数値でない場合に備えてもいることに注意してください。もしこれを実社会のアプリケーションで使うつもりならば、from を計算するコードは全て不要かもしれません。
[編集] 例
[編集] 例: indexOf を使う
以下の例は indexOf を使って、配列中のある値の位置を探しています。
var array = [2, 5, 9]; var index = array.indexOf(2); // index is 0 index = array.indexOf(7); // index is -1
[編集] 例: ある要素の存在をすべて見つける
以下の例は indexOf を使って、与えられた配列中のある値の添字すべてを探しています。push を使って、値が見つかるたび別の配列にその添字を追加しています。
var indices = [];
var idx = array.indexOf(element)
while (idx != -1)
{
indices.push(idx);
idx = array.indexOf(element, idx + 1);
}