.indexOf()
indexOf()メソッドは、与えられた要素が配列内で最初に見つかるインデックスを返し、何も見つからなければ-1を返します。
文法
arr.indexOf(searchElement[, fromIndex])
引数 | 説明 |
---|---|
searchElement | 配列内で検索する要素を指定します。 |
fromIndex |
初期値:
検索の開始インデックスを指定します。
もし、この |
説明
indexOf
はsearchElement
と配列の要素を厳密な等価を使用して比較します。
(===
を使用するのと同じ方法)
Polyfill
例: 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);
}
例
indexOf
は5thエディションのECMA-262標準で追加されたため、全てのブラウザに提供されていないかもしれません。
この解決策として、あなたのスクリプトが始まる前に下記のコードを使用するという方法があります。
これはブラウザネイティブでサポートされていない際に、indexOf
の使用を可能にするものです。
このアルゴリズムは5thエディションのECMA-262標準の仕様と一致するもので、
TypeError
とMath.abs
はそれらの元の値であるとみなします。(翻訳に自信なし)
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement, fromIndex) {
if ( this === undefined || this === null ) {
throw new TypeError( '"this" is null or not defined' );
}
var length = this.length >>> 0; // Hack to convert object.length to a UInt32
fromIndex = +fromIndex || 0;
if (Math.abs(fromIndex) === Infinity) {
fromIndex = 0;
}
if (fromIndex < 0) {
fromIndex += length;
if (fromIndex < 0) {
fromIndex = 0;
}
}
for (;fromIndex < length; fromIndex++) {
if (this[fromIndex] === searchElement) {
return fromIndex;
}
}
return -1;
};
}
仕様
ブラウザ互換性
機能 | Chrome | Firefox (Gecko) |
IE | Opera | Safari |
---|---|---|---|---|---|
基本 | ◯ | 1.5 (1.8) | 9 | ◯ | ◯ |
機能 | Android | Chrome for Android |
Firefox Mobile |
IE Mobile |
Opera Mobile |
Safari Mobile |
---|---|---|---|---|---|---|
基本 | ◯ | ◯ | 1.0 (1.8) | ◯ | ◯ | ◯ |
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。