.indexOf()

indexOf()メソッドは、与えられた要素が配列内で最初に見つかるインデックスを返し、何も見つからなければ-1を返します。

文法

arr.indexOf(searchElement[, fromIndex])
引数 説明
searchElement 配列内で検索する要素を指定します。
fromIndex

初期値:0(配列内全体が検索対象)

検索の開始インデックスを指定します。 もし、このfromIndexが配列のlength以上であれば、 配列内を検索しないとして、-1が返されます。 もし提供されたfromIndex値が負の数の場合、 配列の終端からの場所になります。 注意: もし提供されたfromIndexが負の数の場合であっても、 配列の検索する方向は前から後ろへ進みます。 fromIndexの値が0より少ない場合は、配列全体が検索対象になります。

説明

indexOfsearchElementと配列の要素を厳密な等価を使用して比較します。 (===を使用するのと同じ方法)

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標準の仕様と一致するもので、 TypeErrorMath.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)

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。