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

TypedArray.prototype.find()

Methode

Gibt das erste Element eines typisierten Arrays zurück, für das die Testfunktion einen wahrheitsähnlichen Wert liefert, sonst <code>undefined</code>.

seit JavaScript ES2015 Kategorie: method-property

Signatur

TypedArray.prototype.find(callbackFn, thisArg)

Beschreibung

find() durchläuft ein typisiertes Array (z. B. Uint8Array, Float32Array, BigInt64Array) in aufsteigender Indexreihenfolge und ruft für jedes Element die Funktion callbackFn auf. Sobald diese einen wahrheitsähnlichen (truthy) Wert zurückgibt, bricht die Suche ab und das gefundene Element wird zurückgegeben. Findet sich kein passendes Element, ist der Rückgabewert undefined.

Die Methode funktioniert genauso wie Array.prototype.find(), ist aber auf typisierte Arrays zugeschnitten. Sie eignet sich zum Beispiel, um in Binärdaten, Sensorwerten oder Audio-Samples den ersten Wert zu finden, der einen Schwellenwert überschreitet.

Benötigt man statt des Werts die Position, verwendet man findIndex(). Für die Suche vom Ende her gibt es findLast() bzw. findLastIndex() (ES2023). Soll nur geprüft werden, ob überhaupt ein Treffer existiert, ist some() oft ausdrucksstärker.

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 (aktueller Wert), index (Position) und array (das durchsuchte typisierte Array). Ein wahrheitsähnlicher Rückgabewert markiert den Treffer.
$thisArg any undefined Wert, der innerhalb von callbackFn als this verwendet wird. Bei Pfeilfunktionen wirkungslos.

Rückgabewert

Typ
number | bigint | undefined
Beschreibung
Das erste Element, das den Test besteht (bei BigInt64Array/BigUint64Array ein bigint), andernfalls undefined.

Beispiele

Ersten Wert über einem Schwellenwert finden

const temperaturen = new Float32Array([18.5, 19.2, 22.8, 25.1, 21.0]);

const ersteHitze = temperaturen.find((t) => t > 22);
console.log(ersteHitze);

const frost = temperaturen.find((t) => t < 0);
console.log(frost);
22.799999237060547 undefined

Index und Element gemeinsam nutzen

const bytes = new Uint8Array([0x00, 0x00, 0x7f, 0xff, 0x10]);

// Erstes Nicht-Null-Byte ab Position 1 suchen
const treffer = bytes.find((wert, index) => index >= 1 && wert !== 0);
const position = bytes.findIndex((wert, index) => index >= 1 && wert !== 0);

console.log(`Byte 0x${treffer.toString(16)} an Position ${position}`);
Byte 0x7f an Position 2

Suche in einem BigInt64Array

const zeitstempel = new BigInt64Array([1_700_000_000n, 1_750_000_000n, 1_800_000_000n]);

const grenze = 1_720_000_000n;
const naechster = zeitstempel.find((ts) => ts > grenze);

console.log(naechster, typeof naechster);
1750000000n bigint

thisArg mit einer normalen Funktion

const pegel = new Int16Array([-120, -80, 300, 1200, 50]);
const config = { max: 1000 };

const uebersteuert = pegel.find(function (wert) {
  return Math.abs(wert) > this.max;
}, config);

console.log(uebersteuert);
1200

// Wichtig · Fallstricke

  • Treffer vs. undefined: Anders als bei normalen Arrays können typisierte Arrays kein undefined enthalten – ein Rückgabewert undefined bedeutet also immer „nicht gefunden“. Aber Vorsicht: Ein gefundener Wert 0 ist falsy. Prüfen Sie daher mit === undefined und nicht mit if (!ergebnis).
  • Gleitkomma-Genauigkeit: Float32Array speichert Werte mit einfacher Genauigkeit, daher liefert find() z. B. 22.799999237060547 statt 22.8. Vergleiche mit exakten Dezimalwerten (=== 22.8) schlagen dadurch fehl.
  • BigInt-Arrays: Bei BigInt64Array/BigUint64Array sind die Elemente vom Typ bigint; Vergleiche mit number über === schlagen fehl (5n === 5 ist false).
  • Kein generisches Verhalten: Die Methode wirft einen TypeError, wenn this kein typisiertes Array ist, oder wenn der zugrunde liegende ArrayBuffer abgelöst (detached) wurde, z. B. nach postMessage mit Übertragung.
  • Kurzschluss: Die Suche stoppt beim ersten Treffer – bei großen Puffern ist find() daher effizienter als filter()[0].
  • Kompatibilität: Seit ES2015 in allen modernen Browsern und in Node.js verfügbar (Baseline). findLast() kam erst mit ES2023 hinzu.