Die findIndex() Methode gibt den Index des ersten Elementes eines Arrays zurück, das die übergebene Testfunktion erfüllt. Wird kein Element gefunden, wird -1 zurückgegeben.

Siehe zudem auch die find() Methode an, die den Wert eines gefundenen Elements anstatt des Indexes zurückgibt.

Syntax

arr.findIndex(callback[, thisArg])

Parameter

callback
Funktion, die für jeden Wert des Arrays ausgeführt wird und drei Argumente hat:
element
Das aktuell zu verarbeitetende Element des Arrays.
indexOptional
Der Index des aktuell zu verarbeitetenden Elements des Arrays.
arrayOptional
Das Array , auf dem findIndex aufgerufen wurde.
thisArgOptional
Objekt, welches beim Ausführen der callback Funktion als this verwendet wird.

Rückgabewert

EIn Index des Arrays, wenn ein Element den Test besteht, andernfalls -1.

Beschreibung

Die findIndex Methode führt die callback Funktion einmal für jeden Index von 0 bis length-1 (inklusive) des Arrays aus, bis ein Element gefunden wurde, für das die callback Funktion eine truthy Wert (ein Wert, der als true interpretiert werden kann) zurückliefert. Wird ein solches Element gefunden, gibt findIndex sofort den Index dieses Durchlaufs zurück. Liefert die callback Funktion nie einen truthy Wert zurück oder ist die Länge des Arrays gleich 0, gibt findIndex -1 zurück. Im Gegensatz zu anderen Array-Methoden, wie z. B. some(), wird die callback Funktion auch nicht initialisierte Wert aufgerufen.

Die callback Funktion nimmt drei Argumente entgegen: den Wert des Elements, den Index des Elements und das Array, das durchlaufen wird.

Wenn thisArg in findIndex angegeben ist, wird es als this für jeden Aufruf der callback Funktion verwendet. Wenn es nicht angegeben wurde, wird undefined verwendet.

findIndex verändert das ursprüngliche Array nicht.

Die Anzahl der zu durchlaufenden Elemente in der findIndex Methode werden vor dem ersten Aufruf der callback Funktion gesetzt. Elemente, die nach dem findIndex Aufruf hinzugefügt wurden, werden nicht von der callback Funktion behandelt.
Wenn ein noch nicht durchlaufenes Element des Arrays von der callback Funktion geändert wird, wird dieser geänderte Wert der callback Funktion übergeben. Die callback Funktion bekommt immer den Wert, der zum Zeitpunkt des Besuchens eines Elementes gesetzt ist. Gelöschte Elemente werden nicht angeschaut.

Beispiele

Finde den Index einer Primzahl in einem Array

Das folgende Beispiel findet den Index des ersten Elements eines Array, das eine Primzahl ist. Oder es gibt -1 zurück falls keine Primzahl in dem Array enthalten ist.

function isPrime(element, index, array) {
  var start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}

console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, not found
console.log([4, 6, 7, 12].findIndex(isPrime)); // 2

Finden eines Index mithilfe von Arrow Funktionen

Das folgende Beispiel findet den Index von einer Frucht mithilfe von Arrow Funktionen.

const fruits = ["apple", "banana", "cantaloupe", "blueberries", "grapefruit"];

const index = fruits.findIndex(fruit => fruit === "blueberries");

console.log(index); // 3
console.log(fruits[index]); // blueberries

Polyfill

// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
if (!Array.prototype.findIndex) {
  Object.defineProperty(Array.prototype, 'findIndex', {
    value: function(predicate) {
     // 1. Let O be ? ToObject(this value).
      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }

      var o = Object(this);

      // 2. Let len be ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;

      // 3. If IsCallable(predicate) is false, throw a TypeError exception.
      if (typeof predicate !== 'function') {
        throw new TypeError('predicate must be a function');
      }

      // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
      var thisArg = arguments[1];

      // 5. Let k be 0.
      var k = 0;

      // 6. Repeat, while k < len
      while (k < len) {
        // a. Let Pk be ! ToString(k).
        // b. Let kValue be ? Get(O, Pk).
        // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
        // d. If testResult is true, return k.
        var kValue = o[k];
        if (predicate.call(thisArg, kValue, k, o)) {
          return k;
        }
        // e. Increase k by 1.
        k++;
      }

      // 7. Return -1.
      return -1;
    },
    configurable: true,
    writable: true
  });
}

Sollten Sie wirklich veraltete JavaScript Umgebung unterstützen müssen, die ihrerseits Object.defineProperty nicht unterstützen, ist es ratsam, die Array.prototype Methode gar nicht mit dem Polyfill zu erweitern, da man diese nicht non-enumerable machen kann.

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Array.prototype.findIndex' in dieser Spezifikation.
Standard Initiale Definition.
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Array.prototype.findIndex' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

FunktionChromeEdgeFirefoxInternet ExplorerOperaSafari
Grundlegende Unterstützung45 Ja25 Nein328
FunktionAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Grundlegende Unterstützung Ja Ja Ja4 Ja8 Ja

1. From version 0.12: this feature is behind the --harmony runtime flag.

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Mitwirkende an dieser Seite: schlagi123, psychotammi, sosnet, labcode-de
Zuletzt aktualisiert von: schlagi123,