Signatur
Beschreibung
lastIndexOf() durchsucht ein Array von hinten nach vorne und gibt den Index des ersten Treffers aus dieser Richtung zurück. Das ist also das letzte Vorkommen des gesuchten Werts. Wird nichts gefunden, ist das Ergebnis -1. Die Methode ist das Gegenstück zu indexOf(), das von vorne sucht.
Verglichen wird mit strikter Gleichheit (===). Deshalb findet lastIndexOf() niemals NaN, und Objekte werden nur über ihre Referenz gefunden, nicht über ihren Inhalt. Für eigene Bedingungen, etwa „letztes Objekt mit id === 3“, ist findLastIndex() die richtige Wahl.
Mit dem optionalen Parameter fromIndex legst du fest, ab welcher Position rückwärts gesucht wird. Negative Werte zählen vom Ende des Arrays: -1 ist das letzte Element. Typische Anwendungen sind das letzte Vorkommen eines Werts in einer Log- oder Verlaufsliste, das Erkennen von Duplikaten (zusammen mit indexOf()) und das Durchlaufen aller Vorkommen von hinten.
Die Methode ist generisch. Sie funktioniert über Array.prototype.lastIndexOf.call() auch mit array-ähnlichen Objekten, die eine length-Eigenschaft und numerische Schlüssel haben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $searchElement Pflicht | any | Der gesuchte Wert. Verglichen wird mit ===. |
|
| $fromIndex | number | array.length - 1 | Nullbasierter Index, ab dem rückwärts gesucht wird. Wird in eine Ganzzahl umgewandelt. Negative Werte zählen vom Ende (fromIndex + array.length). Ist das Ergebnis kleiner als -array.length, wird nicht gesucht und -1 zurückgegeben. Werte ab array.length durchsuchen das ganze Array. |
Rückgabewert
searchElement oder -1, wenn der Wert nicht gefunden wird.Beispiele
Letztes Vorkommen eines Werts finden
const besuchteSeiten = ['start', 'produkte', 'kontakt', 'produkte', 'impressum'];
console.log(besuchteSeiten.lastIndexOf('produkte'));
console.log(besuchteSeiten.indexOf('produkte'));
console.log(besuchteSeiten.lastIndexOf('blog'));
Suche mit fromIndex (auch negativ)
const zahlen = [2, 5, 9, 2, 7, 2];
console.log(zahlen.lastIndexOf(2)); // ganzes Array
console.log(zahlen.lastIndexOf(2, 4)); // ab Index 4 rückwärts
console.log(zahlen.lastIndexOf(2, -3)); // ab Index 3 rückwärts
console.log(zahlen.lastIndexOf(2, -7)); // vor dem Anfang: keine Suche
Alle Vorkommen von hinten ermitteln
const findeAlleIndizes = (arr, wert) => {
const indizes = [];
let i = arr.lastIndexOf(wert);
while (i !== -1) {
indizes.push(i);
// Bei i === 0 abbrechen, sonst würde fromIndex -1 wieder am Ende beginnen
i = i > 0 ? arr.lastIndexOf(wert, i - 1) : -1;
}
return indizes;
};
console.log(findeAlleIndizes(['a', 'b', 'a', 'c', 'a'], 'a'));
Eindeutige Werte erkennen (Duplikat-Prüfung)
const tags = ['js', 'css', 'html', 'js', 'node'];
// Ein Wert ist eindeutig, wenn erstes und letztes Vorkommen übereinstimmen
const eindeutig = tags.filter(
(tag) => tags.indexOf(tag) === tags.lastIndexOf(tag)
);
console.log(eindeutig);
// Wichtig · Fallstricke
NaNwird nie gefunden:[NaN].lastIndexOf(NaN)ergibt-1, weilNaN !== NaNgilt. Verwende stattdessenfindLastIndex(Number.isNaN)oderincludes().- Objekte werden über die Referenz verglichen:
[{ id: 1 }].lastIndexOf({ id: 1 })ergibt-1. Für eine Suche nach Inhalt nimmfindLastIndex(). - Falle mit
fromIndexin Schleifen: Wirdi - 1zu-1, beginnt die Suche wieder am Ende des Arrays. Das kann zu Endlosschleifen führen. Prüfe deshalb vorher aufi === 0. - Lücken: Leere Plätze in Arrays mit Lücken werden übersprungen.
[, 1].lastIndexOf(undefined)ergibt-1. - Performance: Die Suche ist linear (O(n)). Bei vielen Abfragen auf großen Datenmengen ist ein
MapoderSetdeutlich schneller. - Die Methode wird in allen Browsern und Node.js-Versionen unterstützt. Typisierte Arrays haben eine eigene Variante:
TypedArray.prototype.lastIndexOf().