JavaScript

Array.prototype.findIndex()メソッド

 編集:2022.08.18 by T.A.

その Array の要素の先頭からコールバック関数に掛けて処理結果がtrueだった要素の位置(インデックス)を数値で返します。

テスト関数を満たす要素がない場合を含め、それ以外の場合は -1 を返します。

コールバック関数による:

arr.findIndex(callback[, thisArg])
関数部:
function 関数名(element[, index[, array]]){
 処理
}

インラインコールバック関数による:

arr.findIndex(function(element[, index[, array]]){処理}[, thisArg])

アロー関数による:

arr.findIndex( (element[, index[, array]]) => {処理})
arr Arrayオブジェクト
callback 実行する関数名を記述。
関数名 callbackと同じ名前を記述。
処理 処理プログラム。必ずreturnで評価結果を返す。

アロー関数使用の場合、「{ }」に囲まれていない場合は評価式となります。

element 配列内で現在処理されている要素。
index 省略可。配列内で現在処理されている要素の位置。
array 省略可。findIndex() を呼び出した元の配列。
thisArg 省略可。任意で、callback を実行する時に this として使うオブジェクト。
戻り値

見つかった要素のインデックス値。それ以外の場合は、-1 を返します。

解説

findIndex() メソッドは、配列のそれぞれの位置に対して callback を1回ずつ呼び出し、callback が真値を返すものを見つけるまで繰り返します。

そのような要素が見つかると、findIndex() はすぐにその要素の位置を返します。callback が真値を返すと(または配列の length が 0 であると)、findIndex() は -1 を返します。

極端な場合の警告: Array.some() などの他の配列メソッドとは異なり、callback は値が割り当てられていない位置でも実行されます。

callback は3つの引数で呼び出されます:

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

findIndex() で処理される要素の範囲は、callback が最初に呼び出される前に設定されます。callback は最初の findIndex() の呼び出し以降に配列に追加された要素は処理しません。配列内で未処理の既存の要素が callback によって変更された場合、callback へ渡される値は findIndex() がその要素の位置を処理する時点での値になります。

削除された値も処理対象になります。

¶省く

配列内の素数の位置を検索する

次の例では、配列の中で素数の入った最初の要素の位置を返し、素数が見つからなかった場合は -1 を返します。

function F(num){
  if(num > 5){
    return true;
  }
  return false;
}
D=[4, 6, 8, 9, 12].findIndex(F); //=1
D=[4, 3, 2, 1, 0].findIndex(F); //=-1。見つからなかった
アロー関数を使用して位置を検索する

次の例では、アロー関数を使用してフルーツの位置を検索しています。

const fruits = ["apple", "banana", "cantaloupe", "blueberries", "grapefruit"];
const index = fruits.findIndex(fruit => fruit === "blueberries"); //=3
D=[4, 6, 8, 9, 12].findIndex(function(ele){return ele > 5}); //=1
D=[4, 6, 8, 9, 12].findIndex(function(ele,idx){
  alert(idx); //処理する配列のインデックスを表示。
  return ele > 5
}); //=1

テスト