mozilla

Array.prototype.indexOf()

概要

引数に与えられた内容と同じ内容を持つ配列要素の内、最初のものの添字を返します。存在しない場合は -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 に基づく。

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

関連情報

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

Contributors to this page: Potappo, teoli, Yuichirou, ethertank, Kozawa
最終更新者: teoli,
サイドバーを隠す