`Array` および TypedArray で要素を検索する
配列の最初から要素を検索する
Array 内で条件を満たす要素を検索することは一般的なタスクであり、Array.prototype または様々な TypedArray プロトタイプ上で利用できる find および findIndex メソッドで行います。Array.prototype.find は述語を受け取り、その述語が true を返す最初の要素を配列から返します。述語がどの要素に対しても true を返さない場合、このメソッドは undefined を返します。
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}];
inputArray.find((element) => element.v % 2 === 0);
// → {v:2}
inputArray.find((element) => element.v % 7 === 0);
// → undefined
Array.prototype.findIndex は同様に動作しますが、見つかった場合はインデックスを、見つからない場合は -1 を返します。TypedArray バージョンの find および findIndex も全く同じ方法で動作しますが、唯一の違いはそれが Array インスタンスではなく TypedArray インスタンスに対して動作する点です。
inputArray.findIndex((element) => element.v % 2 === 0);
// → 1
inputArray.findIndex((element) => element.v % 7 === 0);
// → -1
配列の最後から要素を検索する
もし Array の最後の要素を検索したい場合はどうしますか?この使用例は自然に発生することがあります。例えば、複数の一致を重複排除して最後の要素を選ぶ場合や、その要素が配列の末尾付近にあると予想される場合です。find メソッドでは、まず入力を反転させる方法を使うことができます。以下のように:
inputArray.reverse().find(predicate)
しかし、それは元の inputArray をインプレースで反転させることになり、時には好ましくないことがあります。
findLast および findLastIndex メソッドを使用することで、この使用例を直接そして効率的に解決することができます。これらのメソッドは find や findIndex と同様に動作しますが、Array または TypedArray の末尾から検索を開始する点が異なります。
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}];
inputArray.findLast((element) => element.v % 2 === 0);
// → {v:4}
inputArray.findLast((element) => element.v % 7 === 0);
// → undefined
inputArray.findLastIndex((element) => element.v % 2 === 0);
// → 3
inputArray.findLastIndex((element) => element.v % 7 === 0);
// → -1