webentwicklung-frage-antwort-db.com.de

javascript .filter () wahre Boolesche

function bouncer(arr) {
  // Don't show a false ID to this bouncer.
    function a(b) {
      if(b !== false) {
        return b;
      }
    }

    arr = arr.filter(a);
    return arr;
}

bouncer([7, 'ate', '', false, 9]);

Ich muss nur echte boolesche Anweisungen zurückgeben, und wenn ich diesen Code ausführe, funktioniert er. Ich bin jedoch ziemlich verwirrt, weil meine "if-Anweisung" funktioniert, ob b! == true oder b! == false. Könnte jemand bitte erklären, warum dies in beide Richtungen funktioniert?

9
jyoon006

Ich löste ein ähnliches Problem und kam dazu:

function bouncer(arr) {
  return arr.filter(Boolean);
}
bouncer([7, 'ate', '', false, 9]);
// returns ['7','ate','9']
24
hello world

einfachste Möglichkeit, dies zu tun:

function bouncer(arr) {
    return arr.filter(x => !!x);
}
4
mahig

Es ist, weil Sie den Wert zurückgeben. Die Filterfunktion sollte true oder false zurückgeben:

function bouncer(arr) {
    arr = arr.filter(function(x) { console.log(x === true)
       if(x !== false) {
           return true;
       }
    });
    return arr;
}

oder kürzer:

function bouncer(arr) {
    return arr.filter(function(x) { console.log(x === true)
       return x !== false;
    });
}
3
Emil Ingerslev

Ihre Funktion wirkt, weil JavaScript-Werte in booleschen Vergleichen "wahr" oder "falsey" sind. Nicht-boolesche Werte werden bei Verwendung in einem booleschen Kontext zu einem booleschen Wert (Vergleiche, if-Anweisungen usw.)

Wenn ich Ihre Absicht verstehe, können Sie Ihre Funktion ändern, um Ihre erwartete Ausgabe folgendermaßen zu erhalten:

function bouncer(arr) {
  // Don't show a false ID to this bouncer.
    function a(b) {
      if(typeof(b) === 'boolean' && !b) {
        return new Boolean(b);
      }
    }

    arr = arr.filter(a);
    return arr;
}

bouncer([7, 'ate', '', false, 9, true]);
1
jdphenix

Anscheinend wurde .filter in ES5 eingeführt. Dies hat mir auf jeden Fall geholfen, meine Gedanken zu fassen, was hier vor sich geht. Ich hoffe es hilft!

Im Wesentlichen schreiben

arr.filter(Boolean)

ist das gleiche wie das Schreiben

arr.filter( function(x) { return Boolean(x); }); 

da Boolean auch eine Funktion ist, die wahr zurückgibt und falsch, wenn falsch!

Quelle: hier .

0
leonel.ai