この記事ではJavaScriptの『findIndexメソッド』について、
findIndex
メソッドとはfindIndex
メソッドの構文findIndex
メソッドの使い方- 条件に一致する要素のインデックスを取得する
- 複雑な条件で要素のインデックスを取得する
findIndex
メソッドの特徴- 配列の先頭の要素からテスト関数を実行し、最初に見つかった要素を返す
- テスト関数を満たす要素が見つからない場合は
-1
を返す - テスト関数が一度でも該当の要素を見つければ、配列の反復処理が終了する
- 空のスロットは
undefined
と同じように扱われる
- コールバック関数の
thisArg
について
などをサンプルコードを用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。
findIndexメソッドとは
findIndex
メソッドは、配列内の要素に対してテスト関数を用いて検索し、最初に見つかった要素のインデックスを返すメソッドです。条件に一致する要素が見つからない場合は-1
を返します。このメソッドは、特定の条件を満たす要素の位置を効率的に見つけるのに便利です。
後ほどfindIndex
メソッドの構文や使い方について詳しく説明しますが、まず以下に示す簡単なサンプルコードを見てみましょう。
const arr = [1, 2, 3, 4, 5];
const index = arr.findIndex((element) => element > 2);
console.log(index); // 2
上記のサンプルコードでは、配列arr
の各要素に対してテスト関数を用いて検索し、最初に見つかった2
より大きい要素(この場合3
)のインデックスを返しています。
findIndexメソッドの構文
findIndex
メソッドの構文を以下に示します。
構文
array.findIndex(callbackFn[, thisArg])
array
は検索対象の配列です。findIndex
メソッドの引数と返り値を以下に示します。
引数
callbackFn
- 配列の各要素に対して実行するテスト関数です。
- テスト関数には以下の引数を渡すことができます(第1引数の
element
のみを渡して使用することが多いです)。element
: テスト実行中の要素index
(省略可能): テスト実行中の要素のインデックスarray
(省略可能):findIndex
メソッドでテストしている配列
thisArg
(省略可能)callbackFn
関数内でthis
として使用される値です。
返り値(戻り値)
- テスト関数(
callbackFn
)が見つけた最初の要素のインデックスを返します。見つからなかった場合には-1
が返されます。
findIndexメソッドの使い方
findIndex
メソッドについて、以下に示している使い方をこれから説明します。
- 条件に一致する要素のインデックスを取得する
- 複雑な条件で要素のインデックスを取得する
上記の使い方について順番に説明します。
条件に一致する要素のインデックスを取得する
findIndex
メソッドを使うと、条件に一致する最初の要素のインデックスを取得できます。
以下のサンプルコードでは、配列内の要素のうち、最初に現れる偶数の要素のインデックスを取得しています。
const arr = [1, 3, 5, 7, 8, 10];
const index = arr.findIndex((element) => element % 2 === 0);
console.log(index); // 4
複雑な条件で要素のインデックスを取得する
findIndex
メソッドは、複雑な条件を指定して要素のインデックスを取得することも可能です。
以下のサンプルコードでは、配列内のオブジェクトのうち、特定のプロパティの値に一致するオブジェクトのインデックスを取得しています。
const persons = [
{ id: 1, name: 'Taro', age: 30 },
{ id: 2, name: 'Hanako', age: 25 },
{ id: 3, name: 'Ken', age: 35 },
];
const index = persons.findIndex((person) => person.id === 2);
console.log(index); // 1
findIndexメソッドの特徴
findIndex
メソッドの特徴を以下に示します。
- 配列の先頭の要素からテスト関数を実行し、最初に見つかった要素を返す
- テスト関数を満たす要素が見つからない場合は
-1
を返す - テスト関数が一度でも該当の要素を見つければ、配列の反復処理が終了する
- 空のスロットは
undefined
と同じように扱われる
各特長について順番に説明します。
配列の先頭の要素からテスト関数を実行し、最初に見つかった要素を返す
findIndex
メソッドは、配列の先頭の要素からテスト関数を実行し、条件に一致する最初の要素のインデックスを返します。サンプルコードを以下に示します。
const arr = [1, 2, 3, 4, 5];
const index = arr.findIndex((element) => element > 2);
console.log(index); // 2
上記のサンプルコードから分かるように、テスト関数を満たす要素が複数存在する場合でも、findIndex
メソッドでは条件に一致する最初の要素のインデックスのみを返します。
テスト関数を満たす要素が見つからない場合は-1を返す
findIndex
メソッドはテスト関数を満たす要素が見つからない場合には、-1
を返します。サンプルコードを以下に示します。
const arr = [1, 2, 3, 4, 5];
const index = arr.findIndex((element) => element > 10);
console.log(index); // -1
上記のサンプルコードは、10
より大きい要素を検索していますが、そのような要素は配列内に存在しないため、-1
を返しています。
テスト関数が一度でも該当の要素を見つければ、配列の反復処理が終了する
findIndex
メソッドは、テスト関数が一度でも該当の要素を見つければ、配列の反復処理が終了します。サンプルコードを以下に示します。
const arr = [1, 2, 3, 4, 5];
const index = arr.findIndex((element) => {
console.log('Checking element:', element);
return element > 2;
});
console.log(index);
// ログ出力
// Checking element: 1
// Checking element: 2
// Checking element: 3
// 2
上記のサンプルコードでは、各要素についてコンソールにログを出力しています。2
より大きい最初の要素を見つけた後、配列の反復処理が終了していることが分かります。
空のスロットはundefinedと同じように扱われる
findIndex
メソッドは空のスロットに対しても処理を実行します。その際、空のスロットはundefined
として扱われます。サンプルコードを以下に示します。
const arr = [1, , , , 5];
// すべての要素を表示
const index = arr.findIndex((element) => {
console.log('number:', element);
return element === 5;
});
console.log(index);
// ログ出力
// number: 1
// number: undefined
// number: undefined
// number: undefined
// number: 5
// 4
上記のサンプルコードでは、各要素についてコンソールにログを出力しています。空のスロットはundefined
として扱われていることが分かります。
コールバック関数のthisArgについて
findIndex
メソッドの第2引数に指定できるthisArg
はコールバック関数内でthis
として利用されるオブジェクトを指定するものです。以下のサンプルコードでは、findIndex
メソッドのコールバック関数内でthis
はobj
を指しているため、this.threshold
は10
となります。
const arr = [5, 12, 8, 130, 44];
const obj = { threshold: 10 };
const index = arr.findIndex(function (element) {
return element > this.threshold;
}, obj);
console.log(index); // 1
このように、findIndex
メソッドなどの配列メソッドで第2引数にthisArg
(ここではobj
)を渡すと、コールバック関数内でそのobj
がthis
として参照されます。
アロー関数は、自身のスコープ内でthis
を持たない特性があります。そのため、findIndex
メソッドの第2引数にthisArg
(ここではobj
)を渡しても、コールバック関数内でそのobj
がthis
として正しく参照することができません。そのため、アロー関数ではなく通常の関数(function
キーワードを使った関数)を使用しています。
本記事のまとめ
この記事ではJavaScriptの『findIndexメソッド』について、以下の内容を説明しました。
findIndex
メソッドとはfindIndex
メソッドの構文findIndex
メソッドの使い方- 条件に一致する要素のインデックスを取得する
- 複雑な条件で要素のインデックスを取得する
findIndex
メソッドの特徴- 配列の先頭の要素からテスト関数を実行し、最初に見つかった要素を返す
- テスト関数を満たす要素が見つからない場合は
-1
を返す - テスト関数が一度でも該当の要素を見つければ、配列の反復処理が終了する
- 空のスロットは
undefined
と同じように扱われる
- コールバック関数の
thisArg
について
お読み頂きありがとうございました。