Array mit booleans auswerten
Karl Nehamma
- javascript
0 Karl Nehamma2 Rolf B
Hallo,
hab da mal ne Frage:
Ich habe ein Array, welches je nach Situation Boolean Werte speichert:
[false, true, false]
oder [false, false, false]
oder [true, false, true]
, usw.
Jetzt möchte ich über dieses Array iterieren und wenn mindestens ein Boolean true zurückgibt eine weitere Funktion aufrufen.
Das scheint aber komplizierter als von mir vorerst angenommen!
arr.filter(el => el === true)
, arr.some(true)
oder auch einfach arr.some
scheinen hier nicht die erwartbaren Resultate zu liefern.
Natürlich könnte ich das Array alternativ mit irgendwelchen Repräsentativwerten füllen, aber irgendwie will ich's jetzt wissen, wie man dies mit Booleans löst :)
NACHTRAG:
Ok, includes(true)
dürfte erreichen, was ich versucht habe.
Danke für eure Zeit.
@@Karl Nehamma
Ok,
includes(true)
dürfte erreichen, was ich versucht habe.
Ja, das sollte in deinem einfachen Fall genügen. Für etwas kompliziertere Anwendungen wäre Array.reduce()
das Mittel der Wahl.
🖖 Stay hard! Stay hungry! Stay alive! Stay home!
Hallo Gunnar,
Für etwas kompliziertere Anwendungen wäre Array.reduce() das Mittel der Wahl.
Für ganz komplizierte Anwendungen, ja. Für Prüfungen des Typs "gibt's mindestens eins" oder "sind alle so" aber nicht. Dafür sind some und every genau richtig.
Es sei denn, es geht Dir darum, dass die Methoden reduce, some und every bereits im Internet Explorer 9 vorhanden sind, die includes Methode aber für alle IE Versionen gepolyfillt... polygefillt... hach!!! - einen Polyfill braucht.
Wobei der IE auch keine Pfeilfunktionen kann
Rolf
Hallo Karl,
Die filter Methode kopiert Dir die Array-Elemente in ein neues Array, die eine bestimmte Bedingung erfüllen.
let trueArray = array.filter(el => el === true)
erzeugt also ein Array, dessen Elemente allesamt true sind. Du könntest nun mit trueArray.length > 0 testen, ob mindestens ein true vorhanden war, und mit trueArray.length == array.length, ob alle Elementr true waren. Aber das ist unnötig kompliziert.
Zunächst ein Zwischenschrit. Die Pfeilfunktion el => el === true
kann man auf el => el
verkürzen, sofern sichergestellt ist, dass das durchlaufene Array ausschließlich Booleans enthält.
Feststellen, ob mindestens ein Wert im Array true ist, gelingt mit der Some-Methode so: array.some(el => el)
. Und die Prüfung, ob alle Werte true sind, geht mit array.every(el => el)
.
Du hast aber schon festgestellt, dass es für den Fall eines booleschen Arrays noch einfacher geht.
array.includes(true)
ermittelt, ob mindestens ein true darin ist
!array.includes(false)
(beachte das ! zu Beginn) stellt fest, ob alle Werte true sind.
Rolf
TOP! und noch ein paar Zeichen damit ich die Nachricht absenden kann
👍❗