Signatur
Beschreibung
findLastIndex() ruft die übergebene Testfunktion für jedes Element eines typisierten Arrays (z. B. Int16Array, Float32Array, Uint8Array) auf – beginnend beim letzten Index und rückwärts bis zum Index 0. Sobald die Funktion einen truthy-Wert liefert, bricht die Suche ab und der zugehörige Index wird zurückgegeben. Findet sich kein passendes Element, ist der Rückgabewert -1.
Die Methode eignet sich immer dann, wenn das jüngste oder hinterste Vorkommen eines Werts gesucht wird, etwa der letzte Messwert oberhalb eines Schwellwerts in einem Sensorpuffer, das letzte Nicht-Null-Byte in einem Binärpuffer oder das Ende eines Audiosignals über einer Rauschgrenze. Gegenüber einer manuellen for-Schleife ist sie ausdrucksstärker, gegenüber findIndex() spart sie bei Treffern am Ende Rechenzeit.
Der Algorithmus ist mit Array.prototype.findLastIndex() identisch, arbeitet aber auf typisierten Arrays: Da diese keine Lücken haben, wird die Testfunktion für jeden Index aufgerufen. Wird der zugrunde liegende ArrayBuffer während der Iteration verkleinert oder abgelöst (detached), erhält die Funktion für nicht mehr vorhandene Indizes undefined. Die Methode ist nicht generisch – sie kann nur auf echten TypedArray-Instanzen aufgerufen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $callbackFn Pflicht | (element: number | bigint, index: number, array: TypedArray) => unknown | Testfunktion, die für jedes Element aufgerufen wird. Ein truthy-Rückgabewert markiert einen Treffer. Erhält element (aktueller Wert), index (aktueller Index) und array (das durchlaufene typisierte Array). |
|
| $thisArg | any | undefined | Wert, der innerhalb von callbackFn als this verwendet wird. Bei Pfeilfunktionen wirkungslos. |
Rückgabewert
-1.Beispiele
Letzten Wert über einem Schwellwert finden
const temperaturen = new Float32Array([18.5, 22.1, 25.4, 19.8, 26.2, 21.0]);
const idx = temperaturen.findLastIndex((t) => t > 25);
console.log(idx); // Index des letzten Werts > 25
console.log(temperaturen[idx]); // der Wert selbst
// Kein Treffer
console.log(temperaturen.findLastIndex((t) => t > 40));
Nutzdatenende in einem Byte-Puffer ermitteln (Null-Padding entfernen)
// Puffer mit festem Umfang, am Ende mit Nullen aufgefüllt
const puffer = new Uint8Array([72, 97, 108, 108, 111, 0, 0, 0]);
const letztesByte = puffer.findLastIndex((b) => b !== 0);
const nutzdaten = puffer.subarray(0, letztesByte + 1);
console.log(letztesByte);
console.log(new TextDecoder().decode(nutzdaten));
Index und Array-Parameter nutzen: letzter lokaler Anstieg
const kurse = new Int32Array([100, 104, 101, 99, 103, 102]);
// Letzte Position, an der der Wert gegenüber dem Vorgänger gestiegen ist
const letzterAnstieg = kurse.findLastIndex(
(wert, i, arr) => i > 0 && wert > arr[i - 1]
);
console.log(letzterAnstieg, kurse[letzterAnstieg]);
Mit BigInt64Array arbeiten
const ids = new BigInt64Array([10n, 25n, 30n, 25n, 5n]);
// Bei BigInt-Arrays mit BigInt-Literalen vergleichen
console.log(ids.findLastIndex((id) => id === 25n));
console.log(ids.lastIndexOf(25n)); // gleichwertig für reine Gleichheit
// Wichtig · Fallstricke
- Rückgabewert
-1prüfen:arr[-1]liefertundefined, undsubarray(0, -1 + 1)ergibt ein leeres Array – bei Nichttreffer immer explizit abfragen. - Index vs. Wert: Wird das Element selbst benötigt, ist
findLast()direkter. Für reine Gleichheitsvergleiche istlastIndexOf()einfacher und meist schneller;NaNfindet man aber nur mitfindLastIndex(Number.isNaN). - BigInt-Arrays: Bei
BigInt64Array/BigUint64Arraysind die Elementebigint; ein Vergleich wiex === 25schlägt fehl,x === 25nist nötig. - Gleitkomma-Präzision:
Float32Arrayspeichert Werte mit reduzierter Genauigkeit – exakte Vergleiche mit Dezimalliteralen (z. B.=== 26.2) schlagen oft fehl. - Kompatibilität: Erst seit ES2023; ältere Browser (vor Chrome 97, Firefox 104, Safari 15.4) und Node.js < 18 benötigen ein Polyfill (z. B.
core-js). - Aufruf auf einem abgelösten (detached) Puffer oder einem Nicht-TypedArray wirft einen
TypeError.