Karl Nehamma: Array mit booleans auswerten

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 :)

  1. NACHTRAG:

    Ok, includes(true) dürfte erreichen, was ich versucht habe.

    Danke für eure Zeit.

    1. @@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!

      --
      Home Office ist so frustierend, weil man jetzt noch viel stärker bemerkt mit wievielen Menschen man zu tun hat, die nicht sinnerfassend lesen können. (@Grantscheam)
      1. 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

        --
        sumpsi - posui - obstruxi
  2. 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

    --
    sumpsi - posui - obstruxi
    1. TOP! und noch ein paar Zeichen damit ich die Nachricht absenden kann

      👍❗