Signatur
Beschreibung
findLast() ist das Gegenstück zu find(): Die Testfunktion wird beginnend beim letzten Index bis zum Index 0 aufgerufen. Sobald sie einen truthy-Wert zurückgibt, bricht die Suche ab und das zugehörige Element (nicht dessen Index) wird zurückgegeben. Trifft kein Element zu, ist der Rückgabewert undefined.
Die Methode eignet sich immer dann, wenn das jüngste oder letzte passende Element gesucht wird – etwa der letzte fehlgeschlagene Log-Eintrag, die zuletzt abgeschlossene Bestellung oder der letzte gültige Messwert. Früher musste man dafür umständlich [...arr].reverse().find(...) schreiben, was eine Kopie erzeugt und unnötig Speicher kostet.
findLast() verändert das Array nicht (sofern die Callback-Funktion es nicht selbst tut). Leere Stellen in dünn besetzten Arrays werden nicht übersprungen, sondern wie undefined behandelt. Die Methode ist generisch und funktioniert auch mit array-ähnlichen Objekten über Array.prototype.findLast.call(); auf TypedArrays existiert eine gleichnamige Methode.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $callbackFn Pflicht | (element: any, index: number, array: Array) => unknown | Testfunktion, die für jedes Element (vom Ende her) aufgerufen wird. Erhält element, index und das ursprüngliche array. Ein truthy-Rückgabewert beendet die Suche. |
|
| $thisArg | any | undefined | Wert, der innerhalb von callbackFn als this verwendet wird. Bei Pfeilfunktionen wirkungslos. |
Rückgabewert
undefined, wenn keines zutrifft.Beispiele
Letzte gerade Zahl finden
const zahlen = [3, 8, 5, 12, 7, 9];
const letzteGerade = zahlen.findLast((n) => n % 2 === 0);
console.log(letzteGerade);
// Zum Vergleich: find() liefert das erste Treffer-Element
console.log(zahlen.find((n) => n % 2 === 0));
Letzten Fehler in einem Log ermitteln
const log = [
{ zeit: '10:00', level: 'info', text: 'Server gestartet' },
{ zeit: '10:05', level: 'error', text: 'DB-Timeout' },
{ zeit: '10:07', level: 'info', text: 'Verbindung wiederhergestellt' },
{ zeit: '10:12', level: 'error', text: 'Speicher knapp' },
{ zeit: '10:15', level: 'info', text: 'Cache geleert' }
];
const letzterFehler = log.findLast((eintrag) => eintrag.level === 'error');
console.log(`${letzterFehler.zeit}: ${letzterFehler.text}`);
Kein Treffer und sicherer Zugriff
const bestellungen = [
{ id: 1, status: 'offen' },
{ id: 2, status: 'storniert' }
];
const letzteGeliefert = bestellungen.findLast((b) => b.status === 'geliefert');
console.log(letzteGeliefert);
console.log(letzteGeliefert?.id ?? 'Keine gelieferte Bestellung');
Dünn besetzte Arrays und array-ähnliche Objekte
const luecken = [1, , 3, ,];
luecken.findLast((wert, index) => {
console.log(index, wert);
return false;
});
const arrayAehnlich = { length: 3, 0: 'a', 1: 'bb', 2: 'c' };
const treffer = Array.prototype.findLast.call(arrayAehnlich, (s) => s.length === 1);
console.log(treffer);
// Wichtig · Fallstricke
- Mehrdeutiges
undefined: Enthält das Array selbstundefined-Werte, lässt sich am Rückgabewert nicht erkennen, ob ein Treffer vorlag. Dann besserfindLastIndex()verwenden und auf-1prüfen. - Element statt Index: Wer die Position benötigt, greift zu
findLastIndex(); wer nur prüfen will, ob ein Wert existiert, zusome()oderincludes(). - Mutation während der Iteration: Die Länge wird vor dem ersten Aufruf festgelegt. Nachträglich geänderte Elemente werden mit ihrem aktuellen Wert besucht, gelöschte als
undefined. Das Array im Callback zu verändern, ist schlechter Stil. - Kompatibilität: Seit ES2023 standardisiert; verfügbar ab Chrome/Edge 97, Firefox 104, Safari 15.4 und Node.js 18. Für ältere Umgebungen ist ein Polyfill (z. B. core-js) nötig. In TypeScript muss
libmindestensES2023enthalten. - Performance: Im Gegensatz zu
[...arr].reverse().find()entsteht keine Kopie, und die Suche bricht beim ersten Treffer ab.