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

TypedArray.prototype.findLastIndex()

Methode

Durchläuft ein typisiertes Array vom letzten zum ersten Element und gibt den Index des ersten Treffers der Testfunktion zurück, sonst <code>-1</code>.

seit JavaScript ES2023 (Baseline seit 2022: Chrome 97, Firefox 104 Kategorie: method-property

Signatur

TypedArray.prototype.findLastIndex(callbackFn, thisArg)

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

Typ
number
Beschreibung
Der höchste Index, dessen Element die Testfunktion erfüllt, andernfalls -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));
4 26.200000762939453 -1

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));
4 Hello

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]);
4 103

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
3 3

// Wichtig · Fallstricke

  • Rückgabewert -1 prüfen: arr[-1] liefert undefined, und subarray(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 ist lastIndexOf() einfacher und meist schneller; NaN findet man aber nur mit findLastIndex(Number.isNaN).
  • BigInt-Arrays: Bei BigInt64Array/BigUint64Array sind die Elemente bigint; ein Vergleich wie x === 25 schlägt fehl, x === 25n ist nötig.
  • Gleitkomma-Präzision: Float32Array speichert 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.