Start · Sprachen · JavaScript · Referenz · Array.prototype.findLastIndex()

Array.prototype.findLastIndex()

Methode

Durchläuft das Array von hinten nach vorn und gibt den Index des ersten Elements zurück, das die Testfunktion erfüllt, sonst <code>-1</code>.

seit JavaScript ES2023 (Baseline: alle modernen Browser seit 2022, Kategorie: method-property

Signatur

Array.prototype.findLastIndex(callbackFn, thisArg)

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

Typ
number
Beschreibung
Der Index des letzten Elements, das den Test besteht (also des ersten Treffers von hinten), oder -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));
3 -1

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);
}
3 [ 'Auth fehlgeschlagen', 'Fallback aktiv' ]

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]);
1 { id: 2, done: true, archiviert: true }

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'));
1 2

// Wichtig · Fallstricke

  • Rückgabe -1 immer prüfen: Wird -1 ungeprüft als Index verwendet, entstehen stille Fehler. arr[-1] liefert undefined, arr.at(-1) dagegen das letzte Element, und slice(-1) schneidet ebenfalls das letzte Element aus.
  • Lücken in dünn besetzten Arrays werden nicht übersprungen, sondern als undefined an die Testfunktion übergeben. Hier verhält sich die Methode anders als forEach() oder map().
  • 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 muss lib mindestens es2023 enthalten.
  • Auch auf TypedArrays verfügbar (TypedArray.prototype.findLastIndex()).