Signatur
Beschreibung
findLastIndex() ruft die übergebene Testfunktion für jedes Element auf. Die Reihenfolge ist absteigend, also vom letzten Index bis 0. Sobald die Funktion einen truthy Wert zurückgibt, bricht die Methode ab und gibt den Index dieses Elements zurück. Erfüllt kein Element die Bedingung, ist das Ergebnis -1.
Die Methode ist das Gegenstück zu findIndex(). Sie eignet sich, wenn Sie das letzte passende Element suchen, zum Beispiel den letzten Fehlereintrag in einem Log, die letzte abgeschlossene Aufgabe oder die letzte Position eines Werts, den Sie über eine Bedingung und nicht über Gleichheit bestimmen. Früher musste man dafür das Array umständlich kopieren und umdrehen ([...arr].reverse().findIndex(...)) und den Index danach zurückrechnen.
Brauchen Sie das Element selbst und nicht seinen Index, nehmen Sie findLast(). Suchen Sie einen bestimmten Wert über strikte Gleichheit, genügt lastIndexOf(). findLastIndex() verändert das Array nicht. Die Methode ist generisch: Sie funktioniert mit jedem Objekt, das eine length-Eigenschaft und Schlüssel mit ganzzahligen Indizes hat.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $callbackFn Pflicht | (element: any, index: number, array: Array) => unknown | Testfunktion, die für jedes Element aufgerufen wird. Sie erhält das aktuelle element, dessen index und das durchlaufene array. Ein truthy Rückgabewert markiert einen Treffer. |
|
| $thisArg | any | undefined | Wert, der beim Aufruf von callbackFn als this dient. Bei Pfeilfunktionen hat er keine Wirkung. |
Rückgabewert
-1, wenn kein Element passt.Beispiele
Letzte gerade Zahl finden
const zahlen = [3, 8, 5, 12, 7, 9];
const index = zahlen.findLastIndex((n) => n % 2 === 0);
console.log(index);
console.log(zahlen.findLastIndex((n) => n > 100));
Letzten Fehler in einem Log ermitteln und alles danach ausgeben
const log = [
{ level: 'info', msg: 'Start' },
{ level: 'error', msg: 'DB-Timeout' },
{ level: 'info', msg: 'Retry' },
{ level: 'error', msg: 'Auth fehlgeschlagen' },
{ level: 'info', msg: 'Fallback aktiv' }
];
const letzterFehler = log.findLastIndex((e) => e.level === 'error');
if (letzterFehler !== -1) {
const seitFehler = log.slice(letzterFehler).map((e) => e.msg);
console.log(letzterFehler, seitFehler);
}
Letzten erledigten Eintrag gezielt aktualisieren
const aufgaben = [
{ id: 1, done: true },
{ id: 2, done: true },
{ id: 3, done: false }
];
const i = aufgaben.findLastIndex((a) => a.done);
// Unveränderlich ersetzen mit Array.prototype.with() (ES2023)
const neu = aufgaben.with(i, { ...aufgaben[i], archiviert: true });
console.log(i, neu[i]);
Lücken in Arrays und generische Nutzung
const sparse = [1, , 3];
console.log(sparse.findLastIndex((x) => x === undefined));
const arrayLike = { length: 3, 0: 'a', 1: 'b', 2: 'a' };
console.log(Array.prototype.findLastIndex.call(arrayLike, (x) => x === 'a'));
// Wichtig · Fallstricke
- Rückgabe
-1immer prüfen: Wird-1ungeprüft als Index verwendet, entstehen stille Fehler.arr[-1]liefertundefined,arr.at(-1)dagegen das letzte Element, undslice(-1)schneidet ebenfalls das letzte Element aus. - Lücken in dünn besetzten Arrays werden nicht übersprungen, sondern als
undefinedan die Testfunktion übergeben. Hier verhält sich die Methode anders alsforEach()odermap(). - Veränderungen während der Iteration: Die Länge wird vor dem ersten Aufruf festgelegt. Elemente, die währenddessen angehängt werden, besucht die Methode nicht. Geänderte Werte liest sie zum Zeitpunkt des Besuchs. Verändern Sie das Array im Callback besser nicht.
- Kompatibilität: Verfügbar seit ES2023: Chrome 97, Firefox 104, Safari 15.4 und Node.js 18. Für ältere Umgebungen brauchen Sie ein Polyfill (z. B.
core-js). In TypeScript musslibmindestenses2023enthalten. - Auch auf TypedArrays verfügbar (
TypedArray.prototype.findLastIndex()).