このロケールの翻訳が存在しないため、英語バージョンのコンテンツを表示しています。 Help us translate this article!
findIndex() メソッドは、配列内の要素が指定されたテスト関数を満たす場合、配列内の インデックス を返します。そうでない場合は -1 を返します。
find() メソッドも参照してください。このメソッドは、配列内で見つかった要素のインデックスではなく、値 を返します。
構文
arr.findIndex(callback[, thisArg])
引数
callback- 配列内の各要素に対して実行する関数です。3 個の引数を取ります:
element- 配列内で現在処理されている要素。
indexOptional- 配列内で現在処理されている要素のインデックス。
arrayOptionalfindIndexを呼び出した元の配列。
thisArgOptional- 任意。
callbackが実行される時にthisとして使われるオブジェクト。
戻り値
テストを満たした配列の要素のインデックスを返します。満たさなければ、-1を返します。
説明
findIndex メソッドは、callback 関数が true を返す要素が見つかるまで、配列内の各要素に対して callback 関数を実行します。そのような要素が見つかると、findIndex はすぐにその要素のインデックスを返します。配列内に見つからなければ、find は -1 を返します。callback 関数は、値が割り当てられた配列のインデックスに対してのみ実行されます。 削除されたものや割り当てられていないインデックスに対しては実行されません。
callback は、要素の値、要素のインデックス、検索される Array オブジェクトの 3 個の引数で呼び出されます。
findIndex に thisArg 引数を与えた場合、各 callback の呼び出し時に、その与えたオブジェクトが、this として使用されます。この引数を省略した場合、this は undefined になります。
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
arrow functionを使用してインデックスを検索する
次の例では、アロー関数を使用してフルーツのインデックスを求めています。
const fruits = ["apple", "banana", "cantaloupe", "blueberries", "grapefruit"];
const index = fruits.findIndex(fruit => fruit === "blueberries");
console.log(index); // 3
console.log(fruits[index]); // blueberries
互換コード
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;
};
}
If you need to support truly obsolete JavaScript engines that don't support Object.defineProperty, it's best not to polyfill Array.prototype methods at all, as you can't make them non-enumerable.
仕様
| 仕様 | 状況 | コメント |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Array.prototype.findIndex の定義 |
標準 | Initial definition. |
| ECMAScript Latest Draft (ECMA-262) Array.prototype.findIndex の定義 |
ドラフト |
ブラウザ実装状況
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
findIndex | Chrome 完全対応 45 | Edge 完全対応 12 | Firefox 完全対応 25 | IE 未対応 なし | Opera 完全対応 32 | Safari 完全対応 8 | WebView Android 完全対応 あり | Chrome Android 完全対応 45 | Firefox Android 完全対応 4 | Opera Android 完全対応 あり | Safari iOS 完全対応 8 | Samsung Internet Android 完全対応 あり | nodejs
完全対応
4.0.0
|
凡例
- 完全対応
- 完全対応
- 未対応
- 未対応
- ユーザーが明示的にこの機能を有効にしなければなりません。
- ユーザーが明示的にこの機能を有効にしなければなりません。