Mozilla's getting a new look. What do you think? https://mzl.la/brandsurvey

Array.prototype.findIndex()

findIndex() メソッドは、配列内の要素が指定されたテスト関数を満たす場合、配列内の インデックス を返します。そうでない場合は -1 を返します。

find() メソッドも参照してください。このメソッドは、配列内で見つかった要素のインデックスではなく、 を返します。

構文

arr.findIndex(callback[, thisArg])

引数

callback
配列内の各要素に対して実行する関数です。3 個の引数を取ります:
element
配列内で現在処理されている要素。
index
配列内で現在処理されている要素のインデックス。
array
findIndex を呼び出した元の配列。
thisArg
任意。 callback が実行される時に this として使われるオブジェクト。

説明

findIndex メソッドは、callback 関数が true を返す要素が見つかるまで、配列内の各要素に対して callback 関数を実行します。そのような要素が見つかると、findIndex はすぐにその要素のインデックスを返します。配列内に見つからなければ、find-1 を返します。callback 関数は、値が割り当てられた配列のインデックスに対してのみ実行されます。 削除されたものや割り当てられていないインデックスに対しては実行されません。

callback は、要素の値、要素のインデックス、検索される Array オブジェクトの 3 個の引数で呼び出されます。

findIndexthisArg 引数を与えた場合、各 callback の呼び出し時に、その与えたオブジェクトが、this として使用されます。この引数を省略した場合、thisundefined になります。

findIndex は、呼び出した配列を変更 (mutate) しません。

findIndex によって処理される要素の範囲は callback の最初の呼び出し前に設定されます。findIndex を呼び出した後に追加された配列の要素は、callback の実行対象になりません。既存のまだ処理されていない配列要素が callback により変更された場合、それが callback に渡されると、findIndex がその要素のインデックスにアクセスした時点の値になります。削除された要素は処理の対象になりません。

配列内の素数のインデックスを検索する

次の例は、配列内の素数の要素のインデックスを探します(配列内に素数が見つからない場合は -1 を返します)。

function isPrime(element, index, array) {
  var start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}

console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, not found
console.log([4, 6, 7, 12].findIndex(isPrime)); // 2

互換コード

このメソッドは、ECMAScript 2015 仕様に追加されており、すべての JavaScript 実装環境で使用できるとは限りません。しかし、次のコードスニペットで Array.prototype.findIndex を使用できます:

if (!Array.prototype.findIndex) {
  Array.prototype.findIndex = function(predicate) {
    if (this === null) {
      throw new TypeError('Array.prototype.findIndex called on null or undefined');
    }
    if (typeof predicate !== 'function') {
      throw new TypeError('predicate must be a function');
    }
    var list = Object(this);
    var length = list.length >>> 0;
    var thisArg = arguments[1];
    var value;

    for (var i = 0; i < length; i++) {
      value = list[i];
      if (predicate.call(thisArg, value, i, list)) {
        return i;
      }
    }
    return -1;
  };
}

仕様

仕様 状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.findIndex' in that specification.
Standard Initial definition.
ECMAScript 2016 Draft (7th Edition, ECMA-262)
The definition of 'Array.prototype.findIndex' in that specification.
ドラフト

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 45.0 25.0 (25.0) 未サポート 未サポート 7.1
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート 未サポート 未サポート 25.0 (25.0) 未サポート 未サポート iOS 8

関連情報

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

 このページの貢献者: Marsf, shide55
 最終更新者: Marsf,