Posted at

Array.prototype.findIndex() - 配列から条件を満たす値のインデックス番号を取得する

More than 1 year has passed since last update.

Array.prototype.findIndex()は、配列から条件を満たす要素のインデックス番号を取得するメソッドです。前方から後方にかけて検索し、条件を満たす一番最初の要素だけが返ります。条件を満たす要素が1つもない場合、undefinedが返ります。なお、find()は、値ではなく、インデックス番号が返ります。

概要

名前

findIndex

所属

Array.prototype

仕様書

https://tc39.github.io/ecma262/#sec-array.prototype.findindex

説明

Array.prototype.findIndex ( predicate [ , thisArg ] )

第1引数(predicate)にコールバック関数を指定します。このコールバック関数がtrueを返せばその要素のインデックス番号が検索にヒットした値として返されます。それ以外なら条件を満たしていないと判断され、次の要素のチェックに移ります。配列の全ての要素がこのコールバック関数にかけられます。コールバック関数は、値、インデックス番号、配列そのもの、の3つの引数を受け取ります。

第2引数(thisArg)を指定すると、それがコールバック関数内におけるthisの値となります。省略した場合、thisの値はundefinedです。

function predicate ( value, index, array ) {

return true ;

}

チュートリアル

例えば、配列から6より大きい値のインデックス番号を検索したい、というテーマでArray.prototype.findIndex()を利用してみます。コールバック関数は、引数で受け取った値(value)が6より大きければ条件を満たすのでtrue、それ以外なら条件を満たさないのでfalseを返すようになっています。

var array = [ 3, 6, 9, 4, 7, 8 ] ;

var predicate = function ( value, index, sourceArray ) {

if( value >= 6 ) {

return true ;

} else {

return false ;

}

}

array.findIndex( predicate ) ; // 2

処理は内部で次のように繰り返されます。trueが返った時点でその値のインデックス番号がメソッドの返り値に決定して処理は終了します。

predicate( 3, 0, array ) ; // false

predicate( 6, 1, array ) ; // false

predicate( 9, 2, array ) ; // true (この時点で処理を終了)

predicate( 4, 3, array ) ; // false

predicate( 7, 4, array ) ; // true

predicate( 8, 5, array ) ; // true

参考https://lab.syncer.jp/Web/JavaScript/Reference/Global_Object/Array/prototype/findIndex/