概要

引数に与えられた内容と同じ内容を持つ配列要素の内、最初のものの添字を返します。存在しない場合は -1 を返します。

構文

var index = array.indexOf(searchElement[, fromIndex]);

引数

searchElement
検索する配列要素
fromIndex
検索を始める添字。デフォルトは 0、つまり配列全体が検索されます。もしこの添字が配列の長さ以上だと、 -1 が返され、配列は検索されません。負の数の場合、これは配列の終わりからのオフセットとみなされます。この添字が負の数であっても、配列は前から後ろに検索されることに注意してください。負の添え字の絶対値が配列の長さを超えた場合、配列全体が検索されます。

説明

indexOfsearchElement と配列の要素を 厳密な同値(三重イコール演算子 === で使われるのと同じ方法)を使って比較します。

互換性

indexOf メソッドは ECMA-262 標準に最近追加されたものであり、全てのブラウザで動作するわけではありません。次のコードをスクリプトの先頭に追加することにより、indexOf がネイティブでサポートされていない環境でも、これが使用可能となります。これは ECMA-262 第 5 版で定められたアルゴリズムと完全に同じものです。
ObjectTypeErrorNumberMath.floorMath.absMath.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 に基づく。

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

機能 Firefox (Gecko) Chrome Internet Explorer Opera Safari
基本サポート (有) (有) 9 (有) (有)
機能 Firefox Mobile (Gecko) Android IE Mobile Opera Mobile Safari Mobile
基本サポート ? ? ? ? ?

関連情報

ドキュメントのタグと貢献者

タグ: 
このページの貢献者: teoli, ethertank, Potappo, Yuichirou, Kozawa
最終更新者: teoli,