Signatur
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
-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));
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');
}
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);
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);
// Wichtig · Fallstricke
- Index 0 ist falsy:
if (arr.findIndex(fn))ist fehlerhaft, weil ein Treffer an Position 0 als „nicht gefunden“ gilt,-1dagegen als truthy. Prüfe immer mit!== -1. - NaN:
indexOf(NaN)liefert immer-1. MitfindIndex(Number.isNaN)findest du NaN-Werte inFloat32Array/Float64Array. - BigInt-Arrays: Bei
BigInt64Array/BigUint64Arraysind die Elemente vom Typbigint. Vergleiche mit BigInt-Literalen (x > 100n); gemischte Arithmetik mitnumberwirft einenTypeError. - Die Länge wird vor dem ersten Durchlauf festgelegt. Wird der zugrunde liegende
ArrayBufferwährenddessen verkleinert oder abgetrennt (detached), erhält die Callback-Funktion für die fehlenden Indizesundefined. - Nicht generisch:
TypedArray.prototype.findIndex.call([1, 2], fn)wirft einenTypeError. - Seit ES2015 in allen modernen Browsern und in Node.js unterstützt. Für die Suche vom Ende her gibt es
findLastIndex()(ES2023).