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 July 2015.

lastIndexOf()Array インスタンスのメソッドで、配列中で与えられた要素が見つかった最後の添字を返します。もし存在しなければ -1 を返します。配列は fromIndex から逆向きに検索されます。

試してみましょう

const animals = ["Dodo", "Tiger", "Penguin", "Dodo"];

console.log(animals.lastIndexOf("Dodo"));
// Expected output: 3

console.log(animals.lastIndexOf("Tiger"));
// Expected output: 1

構文

js
lastIndexOf(searchElement)
lastIndexOf(searchElement, fromIndex)

引数

searchElement

検索する配列要素です。

fromIndex 省略可

検索し始める位置のゼロから始まるインデックスで、整数に変換されます

  • インデックスが負の場合、配列の末尾からさかのぼって数えます。 -array.length <= fromIndex < 0 の場合、 fromIndex + array.length が使用されます。
  • fromIndex < -array.length の場合、配列は検索が行われず、 -1 が返されます。概念的には、配列の先頭より前の存在しない位置から始めて、そこから逆方向に進むと考えることができます。途中には配列要素はないので、 searchElement は決して見つかりません。
  • fromIndex >= array.length または fromIndex が省略された場合、 array.length - 1 が使用され、配列全体が検索されます。概念的には、配列の末尾の先にある存在しない位置から始めて、そこから後方に進むと考えることができます。最終的に配列の本当の末尾に到達し、この点から実在する配列要素を逆探索し始めます。

返値

配列内の最後の searchElement のインデックスです。見つからなかった場合は -1 です。

解説

lastIndexOf() メソッドは searchElement と配列の要素を厳密な等価性=== 演算子を使用するアルゴリズムと同じ)を使用して比較します。 NaN 値が等しいものとして比較されることはないので、 searchElementNaN の場合、lastIndexOf() は常に -1 を返します。

lastIndexOf() メソッドは疎配列の空スロットをスキップします。

lastIndexOf() メソッドは汎用的です。これは this 値に length プロパティと整数キーのプロパティがあることだけを期待します。

lastIndexOf() の使用

lastIndexOf() を使って配列中のある値の位置を探す例を以下に示します。

js
const numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2); // 3
numbers.lastIndexOf(7); // -1
numbers.lastIndexOf(2, 3); // 3
numbers.lastIndexOf(2, 2); // 0
numbers.lastIndexOf(2, -2); // 0
numbers.lastIndexOf(2, -1); // 3

lastIndexOf() を使用して NaN を検索することはできません。

js
const array = [NaN];
array.lastIndexOf(NaN); // -1

ある要素の存在をすべて見つける

以下の例は lastIndexOf を使って、与えられた配列中のある値の添字すべてを探しています。push を使って、値が見つかる度に別の配列にその添字を追加しています。

js
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() を使用することはできません。

js
console.log([1, , 3].lastIndexOf(undefined)); // -1

配列以外のオブジェクトに対する lastIndexOf() の呼び出し

lastIndexOf() メソッドは thislength プロパティを読み込み、次にキーが length より小さい非負の整数である各プロパティにアクセスします。

js
const arrayLike = {
  length: 3,
  0: 2,
  1: 3,
  2: 2,
  3: 5, // length が 3 なので lastIndexOf() からは無視される
};
console.log(Array.prototype.lastIndexOf.call(arrayLike, 2));
// 2
console.log(Array.prototype.lastIndexOf.call(arrayLike, 5));
// -1

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-array.prototype.lastindexof

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
lastIndexOf

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報