概要
引数に与えられた内容と同じ内容を持つ配列要素の内、最初のものの添字を返します。存在しない場合は -1
を返します。
構文
var index = array.indexOf(searchElement[, fromIndex]);
引数
searchElement
- 検索する配列要素
fromIndex
- 検索を始める添字。デフォルトは
0
、つまり配列全体が検索されます。もしこの添字が配列の長さ以上だと、-1
が返され、配列は検索されません。負の数の場合、これは配列の終わりからのオフセットとみなされます。この添字が負の数であっても、配列は前から後ろに検索されることに注意してください。負の添え字の絶対値が配列の長さを超えた場合、配列全体が検索されます。
説明
indexOf
は searchElement
と配列の要素を 厳密な同値(三重イコール演算子 ===
で使われるのと同じ方法)を使って比較します。
互換性
indexOf
メソッドは ECMA-262 標準に最近追加されたものであり、全てのブラウザで動作するわけではありません。次のコードをスクリプトの先頭に追加することにより、indexOf
がネイティブでサポートされていない環境でも、これが使用可能となります。これは ECMA-262 第 5 版で定められたアルゴリズムと完全に同じものです。
Object
、TypeError
、Number
、Math.floor
、Math.abs
、 Math.max
がそれぞれオリジナルの値を持つ事を仮定しています。
if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { "use strict"; if (this == null) { throw new TypeError(); } var t = Object(this); var len = t.length >>> 0; if (len === 0) { return -1; } var n = 0; if (arguments.length > 0) { n = Number(arguments[1]); if (n != n) { // shortcut for verifying if it's NaN n = 0; } else if (n != 0 && n != Infinity && n != -Infinity) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } } if (n >= len) { return -1; } var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); for (; k < len; k++) { if (k in t && t[k] === searchElement) { return k; } } return -1; } }
例
例: indexOf
の使用
以下の例は indexOf
を使って、配列中のある値の位置を探しています。
var array = [2, 5, 9]; var index = array.indexOf(2); // index は 0 となる index = array.indexOf(7); // index は -1 となる
例: ある要素の存在をすべて見つける
以下の例は indexOf
を使って、与えられた配列中のある値の添字すべてを探しています。 push
を使って、値が見つかる度に別の配列にその添字を追加しています。
var indices = []; var idx = array.indexOf(element); while (idx != -1) { indices.push(idx); idx = array.indexOf(element, idx + 1); }
ブラウザ実装状況
Kangax's compat tables に基づく。
機能 | Firefox (Gecko) | Chrome | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | (有) | (有) | 9 | (有) | (有) |
機能 | Firefox Mobile (Gecko) | Android | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
基本サポート | ? | ? | ? | ? | ? |