Signatur
Beschreibung
findLast() ist das Gegenstück zu find(): Die Methode ruft die Testfunktion für jedes Element eines typisierten Arrays (z. B. Uint8Array, Float32Array, BigInt64Array) in absteigender Indexreihenfolge auf. Sobald die Funktion einen truthy-Wert zurückgibt, bricht die Suche ab und der zugehörige Elementwert wird zurückgegeben.
Nützlich ist die Methode immer dann, wenn der letzte passende Eintrag gesucht wird, etwa der letzte Messwert über einem Schwellenwert in einem Sensor-Puffer, das letzte Nicht-Null-Byte in einem Binärpuffer oder der jüngste Eintrag in einer zeitlich geordneten Datenreihe. Gegenüber [...arr].reverse().find() spart sie die Kopie und das Umdrehen.
Wird kein passendes Element gefunden, gibt findLast() undefined zurück. Da typisierte Arrays keine Lücken haben und nur Zahlen (bzw. BigInts) enthalten, ist ein Ergebnis von undefined immer eindeutig als „nicht gefunden“ zu deuten. Wird der Index benötigt, verwendet man findLastIndex().
Die Methode verändert das Array nicht selbst, die Callback-Funktion kann dies aber tun. Die Länge wird vor dem ersten Aufruf festgelegt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $callbackFn Pflicht | (element: number | bigint, index: number, array: TypedArray) => unknown | Testfunktion, die für jedes Element aufgerufen wird. Erhält element, index und das array selbst. 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 passt.Beispiele
Letzten Messwert über einem Schwellenwert finden
const temperaturen = new Float32Array([18.5, 22.1, 25.4, 19.8, 23.7, 17.2]);
const letzteWarme = temperaturen.findLast((t) => t > 23);
console.log(letzteWarme);
const extrem = temperaturen.findLast((t) => t > 40);
console.log(extrem);
Letztes Nicht-Null-Byte in einem Puffer ermitteln
const puffer = new Uint8Array([72, 105, 33, 0, 0, 0]);
const letztesByte = puffer.findLast((byte) => byte !== 0);
const index = puffer.findLastIndex((byte) => byte !== 0);
console.log(letztesByte, index);
// Nutzdaten ohne Auffüll-Nullen
console.log(new TextDecoder().decode(puffer.subarray(0, index + 1)));
Mit Index und thisArg arbeiten
const werte = new Int16Array([5, -3, 8, -1, 4]);
const grenzen = { min: 0 };
const treffer = werte.findLast(function (wert, i) {
console.log(`prüfe Index ${i}: ${wert}`);
return wert < this.min;
}, grenzen);
console.log('Ergebnis:', treffer);
BigInt-Arrays durchsuchen
const zeitstempel = new BigUint64Array([1000n, 2500n, 4000n, 5200n]);
const vorGrenze = zeitstempel.findLast((ts) => ts < 4500n);
console.log(vorGrenze);
// Wichtig · Fallstricke
- Kompatibilität: Neu in ES2023; unterstützt ab Chrome 97, Edge 97, Firefox 104, Safari 15.4 und Node.js 18. Für ältere Umgebungen ist ein Polyfill (z. B. core-js) nötig.
- Gleitkomma-Genauigkeit: Bei
Float32Arraywerden Werte auf 32 Bit gerundet –23.7erscheint als23.700000762939453. Vergleiche mit===gegen Dezimalliterale schlagen daher oft fehl; besserMath.fround()oder Toleranzen verwenden. - Ergebnis
0ist falsy: Ist der gefundene Wert0oder0n, liefertif (arr.findLast(...))fälschlich „nicht gefunden“. Stattdessen explizit auf!== undefinedprüfen. - Die Methode ist nicht generisch: Aufruf auf gewöhnlichen Arrays oder Objekten per
call()wirft einenTypeError(für normale Arrays gibt esArray.prototype.findLast()). - Wurde der zugrunde liegende
ArrayBufferabgetrennt (detached, z. B. nachpostMessagemit Transfer), wirft der Aufruf einenTypeError.