このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Array.prototype.findLast()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2022年8月.
findLast() はArray インスタンスのメソッドで、配列を逆順に反復処理し、指定されたテスト関数を満たす最初の要素の値を返します。テスト関数を満たす要素がない場合はundefined が返されます。
検索を行う場合は以下のメソッドが必要です。
- 一致する最初の要素を得るには、
find()を使用してください。 - 配列内で一致する最後の位置を得るには、
findLastIndex()を使用してください。 - 値の位置を得るには、
indexOf()を使用してください。(これはfindIndex()に似ていますが、テスト関数を使用するのではなく、それぞれの要素が値と等しいかどうかを調べます。) - 配列に値が存在するかどうかを調べるには、
includes()を使用してください。こちらも、テスト関数を使用する代わりに、各要素が値と等しいかどうかを調べます。 - 指定されたテスト関数を満たす要素を得るには
some()を使用してください。
In this article
試してみましょう
const array = [5, 12, 50, 130, 44];const found = array.findLast((element) => element > 45);console.log(found);// 予想される結果: 130構文
findLast(callbackFn)findLast(callbackFn, thisArg)引数
callbackFn配列のそれぞれの要素に対して実行する関数です。一致する要素が得られたことを示すには真値を返し、そうでなければ偽値を返してください。この関数は以下の引数で呼び出されます。
thisArg省略可callbackFn内でthisとして使われるオブジェクトです。反復処理メソッドを参照してください。
返値
指定されたテスト関数を満たす、配列中の最も大きいインデックス値を持つ要素の値。一致する要素が見つからない場合はundefined となります。
解説
findLast() メソッドは反復処理メソッドです。配列の要素のそれぞれに対して、インデックスの降順に一度ずつcallbackFn 関数を実行し、callbackFn 関数が真値を返すまで繰り返します。findLast() はその要素を返し、配列の反復処理を停止します。もしcallbackFn が真値を返さない場合、findLast() はundefined を返します。これらのメソッドが一般的にどのように動作するのかについての詳細は、反復処理メソッドの節をご覧ください。
callbackFn は、値が割り当てられているものに限らず、配列中のすべてのインデックスに対して呼び出されます。疎配列では、空のスロットはundefined と同じ動作をします。
findLast() メソッドは汎用的です。これはthis 値にlength プロパティと整数キーのプロパティがあることだけを期待します。
例
>要素のプロパティに一致する配列の最後のオブジェクトを探す
この例では、配列要素のプロパティに基づいたテストを作成する方法を示します。
const inventory = [ { name: "apples", quantity: 2 }, { name: "bananas", quantity: 0 }, { name: "fish", quantity: 1 }, { name: "cherries", quantity: 5 },];// 在庫がない場合は真値を返すfunction isNotEnough(item) { return item.quantity < 2;}console.log(inventory.findLast(isNotEnough));// { name: "fish", quantity: 1 }アロー関数と構造分解の使用
先の例は、アロー関数とオブジェクトの構造分解を使用して書くことができるかもしれません。
const inventory = [ { name: "apples", quantity: 2 }, { name: "bananas", quantity: 0 }, { name: "fish", quantity: 1 }, { name: "cherries", quantity: 5 },];const result = inventory.findLast(({ quantity }) => quantity < 2);console.log(result);// { name: "fish", quantity: 1 }配列中の最後の素数を探す
以下の例では、配列の最後の要素で素数の最後の要素を返します。素数がない場合はundefined を返しています。
function isPrime(n) { if (n < 2) { return false; } if (n % 2 === 0) { return n === 2; } for (let factor = 3; factor * factor <= n; factor += 2) { if (n % factor === 0) { return false; } } return true;}console.log([4, 6, 8, 12].findLast(isPrime)); // undefined, not foundconsole.log([4, 5, 7, 8, 9, 11, 12].findLast(isPrime)); // 11メモ:isPrime() の実装は、説明のみを目的としています。実際のアプリケーションでは、繰り返し計算を避けるために、エラトステネスの篩などの、高度に最適化されたアルゴリズムを使用することをお勧めします。
callbackFn の第 3 引数の使用
array 引数は、配列内の別の要素にアクセスする場合、特に、その配列を参照する既存の変数がない場合に便利です。次の例では、最初にfilter() を使用して正の値を抽出し、次にfindLast() を使用して、その隣よりも小さい最後の要素を探します。
const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];const lastTrough = numbers .filter((num) => num > 0) .findLast((num, idx, arr) => { // arr 引数がない場合、変数に保存せずに中間配列に簡単に // アクセスする方法はありません。 if (idx > 0 && num >= arr[idx - 1]) return false; if (idx < arr.length - 1 && num >= arr[idx + 1]) return false; return true; });console.log(lastTrough); // 2findLast() を疎配列で使用
疎配列の空のスロットは処理され、undefined と同じように扱われます。
// インデックス 2、3、4 に要素がない配列の宣言const array = [0, 1, , , , 5, 6];// 値が割り当てられているインデックスだけでなく、すべてのインデックスを表示array.findLast((value, index) => { console.log(`Visited index ${index} with value ${value}`); return false;});// Visited index 6 with value 6// Visited index 5 with value 5// Visited index 4 with value undefined// Visited index 3 with value undefined// Visited index 2 with value undefined// Visited index 1 with value 1// Visited index 0 with value 0// 削除されたインデックスを含め、すべてのインデックスを表示array.findLast((value, index) => { // Delete element 5 on first iteration if (index === 6) { console.log(`Deleting array[5] with value ${array[5]}`); delete array[5]; } // 要素 5 は削除されたにもかかわらず、処理される console.log(`Visited index ${index} with value ${value}`); return false;});// Deleting array[5] with value 5// Visited index 6 with value 6// Visited index 5 with value undefined// Visited index 4 with value undefined// Visited index 3 with value undefined// Visited index 2 with value undefined// Visited index 1 with value 1// Visited index 0 with value 0配列でないオブジェクトに対する findLast() の呼び出し
findLast() メソッドはthis のlength プロパティを読み込み、次にキーがlength より小さい非負の整数である各プロパティにアクセスします。
const arrayLike = { length: 3, 0: 2, 1: 7.3, 2: 4, 3: 3, // length が 3 なので findLast() は無視される};console.log( Array.prototype.findLast.call(arrayLike, (x) => Number.isInteger(x)),); // 4仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype.findlast> |
ブラウザーの互換性
関連情報
Array.prototype.findLastのポリフィル (core-js)- es-shims による
Array.prototype.findLastのポリフィル - インデックス付きコレクションのガイド
ArrayArray.prototype.find()Array.prototype.findIndex()Array.prototype.findLastIndex()Array.prototype.includes()Array.prototype.filter()Array.prototype.every()Array.prototype.some()TypedArray.prototype.findLast()