Doktor Seltsam: false kollidiert mit 0

Beitrag lesen

Hallo

abgesehen von Andreas technischem Hinweis auf false vs falsy, ist reduce der falsche Weg um ein Element in einem Array zu suchen.

Ja.

Richtig ist Array.prototype.some.

Das glaube ich nicht. Das wäre der richtige Weg, wenn es darum geht zu testen, ob ein Element in dem Array ein bestimmtes Kriterium erfüllt.

// Gibt es in dem Array einen Wert größer 3?

const array = [1, 3, 5]

array.some(value => value > 3) // true

Wenn man wie in Ronjas Beispiel testen will, ob in dem Array ein primitiver Wert enthalten ist, oder wenn man eine Objektreferenz hat und testen will, ob das Objekt in der Sammlung enthalten ist, dann wäre Array.prototype.includes() der richtige Weg.

// Ist der Wert 5 in dem Array enthalten?

const array = [1, 3, 5]

array.includes(5) // true

Wenn es darum geht, ein Element in einem Array zu suchen und dieses zurückzugeben, dann wäre Array.prototype.find() das Mittel der Wahl. Wenn das gesuchte Element in dem Array nicht existiert, dann wird der Wert undefined zurückgegeben.

// Gib mir das Tupel, dessen erster Wert 3 ist!

const array = [
    [1, 2],
    [3, 4],
    [5, 6]
]

array.find(([head]) => head === 3) // [3, 4]

Wenn nicht das Element selbst sondern nur sein Index zurückgegeben werden soll, dann wäre das ein Fall für Array.prototype.findIndex(). Hier wird −1 zurückgegeben, wenn kein Element in dem Array den Test besteht.

// Gib mir den Index des Objekts mit dem Eigenschaftswert 3!

const array = [
    {key: 1},
    {key: 3},
    {key: 5}
]

array.findIndex(({key}) => key === 3) // 1

Wenn man einen Vergleichswert hat, kann mit der Methode Array.prototype.indexOf() oder mit Array.prototype.lastIndexOf() den Index ermittelt werden.

Was Ronja wirklich erreichen will, ist mir nicht so richtig klar.

Für mich sieht es so aus, als wollte sie den Index ermitteln. Es soll aber zusätzlich geprüft werden, ob das gesuchte Element überhaupt in dem Array enthalten ist.

Das wäre vermutlich ein Fall für indexOf() oder findIndex() mit Prüfung des Rückgabewertes auf −1.