Array.prototype.findIndex()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2015 browserübergreifend verfügbar.
Die Methode findIndex() von Array-Instanzen gibt den Index des ersten Elements in einem Array zurück, das die angegebene Testfunktion erfüllt.
Wenn 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 (anstatt dessen Index).
Probieren Sie es aus
const array = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array.findIndex(isLargeNumber));
// Expected output: 3
Syntax
findIndex(callbackFn)
findIndex(callbackFn, thisArg)
Parameter
callbackFn-
Eine Funktion, die für jedes Element im Array ausgeführt wird. Sie sollte einen truthy-Wert zurückgeben, wenn ein passendes Element gefunden wurde, andernfalls einen falsy-Wert. Die Funktion wird mit den folgenden Argumenten aufgerufen:
thisArgOptional-
Ein Wert, der bei der Ausführung von
callbackFnalsthisverwendet wird. Siehe iterative Methoden.
Rückgabewert
Der Index des ersten Elements im Array, das den Test besteht. Andernfalls -1.
Beschreibung
Die Methode findIndex() ist eine iterative Methode. Sie ruft die angegebene Funktion callbackFn für jedes Element eines Arrays einmal in aufsteigender Reihenfolge der Indizes auf, bis callbackFn einen truthy-Wert zurückgibt. findIndex() gibt dann den Index dieses Elements zurück und beendet die Iteration über das Array. Wenn callbackFn nie einen truthy-Wert zurückgibt, gibt findIndex() -1 zurück. Weitere Informationen zur allgemeinen Funktionsweise dieser Methoden finden Sie im Abschnitt über iterative Methoden.
callbackFn wird für jeden Index des Arrays aufgerufen, nicht nur für Indizes mit zugewiesenen Werten. Leere Plätze in spärlich besetzten Arrays verhalten sich wie undefined.
Die Methode findIndex() ist generisch. Sie setzt lediglich voraus, dass der this-Wert eine length-Eigenschaft und Eigenschaften mit ganzzahligen Schlüsseln besitzt.
Beispiele
>Den Index der ersten Primzahl in einem Array finden
Das folgende Beispiel gibt den Index des ersten Elements im Array zurück, das eine Primzahl ist, oder -1, wenn keine Primzahl vorhanden ist.
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, not found
console.log([4, 6, 7, 9, 12].findIndex(isPrime)); // 2 (array[2] is 7)
Hinweis:
Die Implementierung von isPrime() dient nur zur Veranschaulichung. In einer realen Anwendung sollten Sie einen Algorithmus mit umfassender Memoisierung wie das Sieb des Eratosthenes verwenden, um wiederholte Berechnungen zu vermeiden.
Das dritte Argument von callbackFn verwenden
Das Argument array ist nützlich, wenn Sie auf ein anderes Element im Array zugreifen möchten, insbesondere wenn keine Variable vorhanden ist, die auf das Array verweist. Das folgende Beispiel verwendet zunächst filter(), um die positiven Werte zu extrahieren, und anschließend findIndex(), um das erste Element zu finden, das kleiner als seine Nachbarelemente ist.
const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const firstTrough = numbers
.filter((num) => num > 0)
.findIndex((num, idx, arr) => {
// Without the arr argument, there's no way to easily access the
// intermediate array without saving it to a variable.
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 spärlich besetzten Arrays verwenden
Sie können in einem spärlich besetzten Array nach undefined suchen und so den Index eines leeren Platzes erhalten.
console.log([1, , 3].findIndex((x) => x === undefined)); // 1
findIndex() für Objekte aufrufen, die keine Arrays sind
Die Methode findIndex() liest die length-Eigenschaft von this und greift dann auf jede Eigenschaft zu, deren Schlüssel eine nichtnegative ganze Zahl kleiner als length ist.
const arrayLike = {
length: 3,
"-1": 0.1, // ignored by findIndex() since -1 < 0
0: 2,
1: 7.3,
2: 4,
};
console.log(
Array.prototype.findIndex.call(arrayLike, (x) => !Number.isInteger(x)),
); // 1
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.findindex> |
Browser-Kompatibilität
Siehe auch
- Polyfill für
Array.prototype.findIndexincore-js - Polyfill für
Array.prototype.findIndexvon es-shims - Leitfaden zu indizierten Sammlungen
ArrayArray.prototype.find()Array.prototype.findLast()Array.prototype.findLastIndex()Array.prototype.indexOf()Array.prototype.lastIndexOf()TypedArray.prototype.findIndex()