このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Array.prototype.lastIndexOf()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
lastIndexOf() はArray インスタンスのメソッドで、配列中で与えられた要素が見つかった最後の添字を返します。もし存在しなければ -1 を返します。配列はfromIndex から逆向きに検索されます。
In this article
試してみましょう
const animals = ["Dodo", "Tiger", "Penguin", "Dodo"];console.log(animals.lastIndexOf("Dodo"));// 予想される結果: 3console.log(animals.lastIndexOf("Tiger"));// 予想される結果: 1構文
lastIndexOf(searchElement)lastIndexOf(searchElement, fromIndex)引数
searchElement検索する配列要素です。
fromIndex省略可検索し始める位置のゼロから始まるインデックスで、整数に変換されます。
- インデックスが負の場合、配列の末尾からさかのぼって数えます。
-array.length <= fromIndex < 0の場合、fromIndex + array.lengthが使用されます。 fromIndex < -array.lengthの場合、配列は検索が行われず、-1が返されます。概念的には、配列の先頭より前の存在しない位置から始めて、そこから逆方向に進むと考えることができます。途中には配列要素はないので、searchElementは決して見つかりません。fromIndex >= array.lengthまたはfromIndexが省略されているかundefinedの場合、array.length - 1が使用され、配列全体が検索されるようにします。概念的には、配列の末尾の先にある存在しない位置から始めて、そこから後方に進むと考えることができます。最終的に配列の本当の末尾に到達し、この点から実在する配列要素を逆探索し始めます。
- インデックスが負の場合、配列の末尾からさかのぼって数えます。
返値
配列内の最後のsearchElement のインデックスです。見つからなかった場合は-1 です。
解説
lastIndexOf() メソッドはsearchElement と配列の要素を厳密な等価性(=== 演算子を使用するアルゴリズムと同じ)を使用して比較します。NaN 値が等しいものとして比較されることはないので、searchElement がNaN の場合、lastIndexOf() は常に-1 を返します。
lastIndexOf() メソッドは疎配列の空スロットをスキップします。
lastIndexOf() メソッドは汎用的です。これはthis 値にlength プロパティと整数キーのプロパティがあることだけを期待します。
例
>lastIndexOf() の使用
lastIndexOf() を使って配列中のある値の位置を探す例を以下に示します。
const numbers = [2, 5, 9, 2];numbers.lastIndexOf(2); // 3numbers.lastIndexOf(7); // -1numbers.lastIndexOf(2, 3); // 3numbers.lastIndexOf(2, 2); // 0numbers.lastIndexOf(2, -2); // 0numbers.lastIndexOf(2, -1); // 3lastIndexOf() を使用してNaN を検索することはできません。
const array = [NaN];array.lastIndexOf(NaN); // -1ある要素の存在をすべて見つける
以下の例はlastIndexOf を使って、与えられた配列中のある値の添字すべてを探しています。push を使って、値が見つかる度に別の配列にその添字を追加しています。
const indices = [];const array = ["a", "b", "a", "c", "a", "d"];const element = "a";let idx = array.lastIndexOf(element);while (idx !== -1) { indices.push(idx); idx = idx > 0 ? array.lastIndexOf(element, idx - 1) : -1;}console.log(indices);// [4, 2, 0]ここでidx == 0 の場合を分けて扱わないといけないことに注意してください。なぜなら、もし検索する値が配列の最初の要素にあると、その値はfromIndex パラメーターにかかわらずいつもヒットしてしまうのです。これはindexOf() メソッドとは異なります。
疎配列に対する lastIndexOf() の使用
疎配列の空のスロットを検索するためにlastIndexOf() を使用することはできません。
console.log([1, , 3].lastIndexOf(undefined)); // -1配列以外のオブジェクトに対する lastIndexOf() の呼び出し
lastIndexOf() メソッドはthis のlength プロパティを読み込み、次にキーがlength より小さい非負の整数である各プロパティにアクセスします。
const arrayLike = { length: 3, 0: 2, 1: 3, 2: 2, 3: 5, // length が 3 なので lastIndexOf() からは無視される};console.log(Array.prototype.lastIndexOf.call(arrayLike, 2));// 2console.log(Array.prototype.lastIndexOf.call(arrayLike, 5));// -1仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype.lastindexof> |