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?
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']
einfachste Möglichkeit, dies zu tun:
function bouncer(arr) {
return arr.filter(x => !!x);
}
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;
});
}
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]);
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 .