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

TypedArray.prototype.findIndex()

Methode

Gibt den Index des ersten Elements eines typisierten Arrays zurück, für das die Testfunktion einen truthy-Wert liefert, sonst <code>-1</code>.

seit JavaScript ES2015 Kategorie: method-property

Signatur

TypedArray.prototype.findIndex(callbackFn, thisArg)

Beschreibung

Die Methode findIndex() steht allen typisierten Arrays zur Verfügung (Int8Array, Uint8Array, Float32Array, BigInt64Array usw.). Sie ruft die übergebene Funktion für jedes Element in aufsteigender Reihenfolge auf. Sobald die Funktion zum ersten Mal einen truthy-Wert zurückgibt, bricht sie ab und liefert den Index dieses Elements. Findet sie keinen Treffer, gibt sie -1 zurück.

Sinnvoll ist das, wenn du nicht den Wert, sondern die Position eines Elements brauchst, z. B. um in Binärdaten, Audio-Samples oder Messreihen die erste Stelle über einem Schwellwert zu finden und danach mit subarray() oder set() weiterzuarbeiten. Brauchst du nur den Wert, nimm find(). Für eine einfache Gleichheitsprüfung reicht indexOf().

Der Algorithmus ist derselbe wie bei Array.prototype.findIndex(). Typisierte Arrays haben aber immer eine feste Länge und sind nie lückenhaft, jedes Element ist also eine Zahl (oder ein BigInt). Die Methode ist nicht generisch: Sie funktioniert nur mit echten TypedArray-Instanzen.

Parameter

Name Typ Default Beschreibung
$callbackFn Pflicht (element: number | bigint, index: number, array: TypedArray) => unknown Testfunktion, die für jedes Element aufgerufen wird. Sie erhält element (aktueller Wert), index (Position) und array (das typisierte Array selbst). Ein truthy-Rückgabewert markiert den Treffer.
$thisArg any undefined Wert, der beim Aufruf von callbackFn als this verwendet wird. Bei Pfeilfunktionen hat er keine Wirkung.

Rückgabewert

Typ
number
Beschreibung
Der Index des ersten Elements, das den Test besteht, sonst -1.

Beispiele

Erste Messung über einem Schwellwert finden

const temperaturen = new Float32Array([18.5, 19.2, 21.7, 23.4, 22.1]);

const idx = temperaturen.findIndex((t) => t > 21);
console.log(idx);
console.log(temperaturen[idx].toFixed(1));
2 21.7

Kein Treffer ergibt -1

const bytes = new Uint8Array([10, 20, 30]);

const idx = bytes.findIndex((b) => b > 200);
if (idx === -1) {
  console.log('Kein Byte über 200 gefunden');
}
Kein Byte über 200 gefunden

Nullterminierten String in einem Puffer auslesen

const puffer = new TextEncoder().encode('Hallo\0Rest');

// Position des ersten Null-Bytes suchen
const ende = puffer.findIndex((b) => b === 0);
const text = new TextDecoder().decode(
  ende === -1 ? puffer : puffer.subarray(0, ende)
);
console.log(text);
Hallo

Audio-Stille überspringen mit thisArg

const samples = new Float32Array([0, 0.001, -0.002, 0.4, 0.8, -0.3]);
const config = { schwelle: 0.01 };

const start = samples.findIndex(function (s) {
  return Math.abs(s) > this.schwelle;
}, config);

console.log(start);
console.log(samples.subarray(start).length);
3 3

// Wichtig · Fallstricke

  • Index 0 ist falsy: if (arr.findIndex(fn)) ist fehlerhaft, weil ein Treffer an Position 0 als „nicht gefunden“ gilt, -1 dagegen als truthy. Prüfe immer mit !== -1.
  • NaN: indexOf(NaN) liefert immer -1. Mit findIndex(Number.isNaN) findest du NaN-Werte in Float32Array/Float64Array.
  • BigInt-Arrays: Bei BigInt64Array/BigUint64Array sind die Elemente vom Typ bigint. Vergleiche mit BigInt-Literalen (x > 100n); gemischte Arithmetik mit number wirft einen TypeError.
  • Die Länge wird vor dem ersten Durchlauf festgelegt. Wird der zugrunde liegende ArrayBuffer währenddessen verkleinert oder abgetrennt (detached), erhält die Callback-Funktion für die fehlenden Indizes undefined.
  • Nicht generisch: TypedArray.prototype.findIndex.call([1, 2], fn) wirft einen TypeError.
  • Seit ES2015 in allen modernen Browsern und in Node.js unterstützt. Für die Suche vom Ende her gibt es findLastIndex() (ES2023).