Finden von Elementen in `Array`s und TypedArrays
Elemente von Anfang an finden
Das Finden eines Elements, das eine bestimmte Bedingung in einem Array
erfüllt, ist eine häufige Aufgabe und wird mit den Methoden find
und findIndex
von Array.prototype
sowie den verschiedenen TypedArray-Prototypen durchgeführt. Array.prototype.find
nimmt ein Prädikat und gibt das erste Element im Array zurück, für das dieses Prädikat true
zurückgibt. Wenn das Prädikat für kein Element true
zurückgibt, gibt die Methode undefined
zurück.
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}];
inputArray.find((element) => element.v % 2 === 0);
// → {v:2}
inputArray.find((element) => element.v % 7 === 0);
// → undefined
Array.prototype.findIndex
funktioniert ähnlich, außer dass es den Index zurückgibt, wenn das Element gefunden wird, und -1
, wenn es nicht gefunden wird. Die TypedArray-Versionen von find
und findIndex
arbeiten genau gleich, mit dem einzigen Unterschied, dass sie auf TypedArray-Instanzen anstatt auf Array-Instanzen arbeiten.
inputArray.findIndex((element) => element.v % 2 === 0);
// → 1
inputArray.findIndex((element) => element.v % 7 === 0);
// → -1
Elemente vom Ende aus finden
Was ist, wenn Sie das letzte Element im Array
finden möchten? Dieser Anwendungsfall tritt oft natürlich auf, z. B. wenn man mehrere Übereinstimmungen zugunsten des letzten Elements deduplizieren möchte oder im Voraus weiß, dass sich das Element wahrscheinlich am Ende des Array
befindet. Mit der Methode find
besteht eine Lösung darin, zunächst die Eingabe umzukehren, wie folgt:
inputArray.reverse().find(predicate)
Dies kehrt jedoch das ursprüngliche inputArray
an Ort und Stelle um, was manchmal unerwünscht ist.
Mit den Methoden findLast
und findLastIndex
kann dieser Anwendungsfall direkt und ergonomisch gelöst werden. Sie verhalten sich genau wie ihre Gegenstücke find
und findIndex
, außer dass sie ihre Suche vom Ende des Array
oder TypedArray aus starten.
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}];
inputArray.findLast((element) => element.v % 2 === 0);
// → {v:4}
inputArray.findLast((element) => element.v % 7 === 0);
// → undefined
inputArray.findLastIndex((element) => element.v % 2 === 0);
// → 3
inputArray.findLastIndex((element) => element.v % 7 === 0);
// → -1