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

Array.prototype.findIndex()

Methode

Die Methode <code>findIndex()</code> von <code>Array</code>-Instanzen gibt den Index des ersten Elements zurück, das die Testfunktion erfüllt, sonst -1.

Kategorie: method-property

Signatur

findIndex(callbackFn) / findIndex(callbackFn, thisArg)

Beschreibung

Die Methode findIndex() von Array-Instanzen gibt den Index des ersten Elements in einem Array zurück, das die bereitgestellte Testfunktion erfüllt. Falls kein Element die Testfunktion erfüllt, wird -1 zurückgegeben.

Siehe auch die Methode find(), die das erste Element zurückgibt, das die Testfunktion erfüllt (statt seines Index).

Die Methode findIndex() ist eine iterative Methode. Sie ruft eine bereitgestellte callbackFn-Funktion einmal für jedes Element des Arrays in aufsteigender Indexreihenfolge auf, bis callbackFn einen truthy-Wert zurückgibt. findIndex() gibt dann den Index dieses Elements zurück und beendet die Iteration über das Array. Falls callbackFn niemals einen truthy-Wert zurückgibt, gibt findIndex() -1 zurück. Weitere Informationen zur allgemeinen Funktionsweise dieser Methoden finden Sie im Abschnitt zu iterativen Methoden.

callbackFn wird für jeden Index des Arrays aufgerufen, nicht nur für solche mit zugewiesenen Werten. Leere Positionen (empty slots) in sparse arrays verhalten sich genauso wie undefined.

Die Methode findIndex() ist generisch. Sie erwartet lediglich, dass der this-Wert eine length-Eigenschaft und ganzzahlig indizierte Eigenschaften besitzt.

Parameter

Name Typ Default Beschreibung
$callbackFn Pflicht Function — Eine Funktion, die für jedes Element im Array ausgeführt wird. Sie sollte einen truthy-Wert zurückgeben, um anzuzeigen, dass ein passendes Element gefunden wurde, andernfalls einen falsy-Wert. Die Funktion wird mit folgenden Argumenten aufgerufen: element (das aktuell verarbeitete Element), index (der Index des aktuell verarbeiteten Elements) und array (das Array, auf dem findIndex() aufgerufen wurde).
$thisArg any — Ein Wert, der als this bei der Ausführung von callbackFn verwendet werden soll. Siehe iterative Methoden.

Rückgabewert

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

Beispiele

Index der ersten Primzahl in einem Array finden

function isPrime(n) {
  if (n < 2) {
    return false;
  }
  if (n % 2 === 0) {
    return n === 2;
  }
  for (let factor = 3; factor * factor <= n; factor += 2) {
    if (n % factor === 0) {
      return false;
    }
  }
  return true;
}

console.log([4, 6, 8, 9, 12].findIndex(isPrime)); // -1, nicht gefunden
console.log([4, 6, 7, 9, 12].findIndex(isPrime)); // 2 (array[2] ist 7)

Verwendung des dritten Arguments von callbackFn

const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const firstTrough = numbers
  .filter((num) => num > 0)
  .findIndex((num, idx, arr) => {
    // Ohne das arr-Argument gibt es keine einfache Möglichkeit, auf das
    // Zwischen-Array zuzugreifen, ohne es in einer Variablen zu speichern.
    if (idx > 0 && num >= arr[idx - 1]) return false;
    if (idx < arr.length - 1 && num >= arr[idx + 1]) return false;
    return true;
  });
console.log(firstTrough); // 1

findIndex() auf sparse arrays anwenden

console.log([1, , 3].findIndex((x) => x === undefined)); // 1

findIndex() auf Nicht-Array-Objekten aufrufen

const arrayLike = {
  length: 3,
  "-1": 0.1, // von findIndex() ignoriert, da -1 < 0
  0: 2,
  1: 7.3,
  2: 4,
};
console.log(
  Array.prototype.findIndex.call(arrayLike, (x) => !Number.isInteger(x)),
); // 1

// Wichtig · Fallstricke

Die Implementierung von isPrime() dient nur zur Demonstration. Für eine reale Anwendung würde man einen stark memoisierten Algorithmus wie das Sieb des Eratosthenes verwenden, um wiederholte Berechnungen zu vermeiden.