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]);
私は真のブール文のみを返す必要があり、このコードを実行すると機能します。ただし、「ifステートメント」はb!== trueでもb!== falseでも機能するため、かなり混乱しています。これが両方の方法で機能する理由を誰かが説明できますか?
私は同様の問題を解決していて、これを思いつきました:
function bouncer(arr) {
return arr.filter(Boolean);
}
bouncer([7, 'ate', '', false, 9]);
// returns ['7','ate','9']
どうやら 。filter() はES5で導入されました。
これは間違いなく、ここで起こっていることに私の心を包むのに役立ちました。それが役に立てば幸い!
基本的に、書くこと:
arr.filter(Boolean)
書くことと同じです:
arr.filter( function(x) { return Boolean(x); });
Boolean() は、trueのときに真を、falseのときに偽を返す関数でもあるためです。
例:
var a = [1, 2, "b", 0, {}, "", NaN, 3, undefined, null, 5];
var b = a.filter(Boolean); // [1, 2, "b", {}, 3, 5];
出典: ここ 。
それを行う最も簡単な方法:
function bouncer(arr) {
return arr.filter(x => !!x);
}
値を返すからです。フィルター関数は、次のようにtrueまたはfalseを返します。
function bouncer(arr) {
arr = arr.filter(function(x) { console.log(x === true)
if(x !== false) {
return true;
}
});
return arr;
}
以下:
function bouncer(arr) {
return arr.filter(function(x) { console.log(x === true)
return x !== false;
});
}
ブール比較のJavaScript値が「真実」または「偽」であるため、関数が機能します。非ブール値は、ブール値のコンテキスト(比較、ifステートメントなど)で使用されると、ブール値に強制変換されます。
私があなたの意図を理解している場合は、次のように関数を変更して期待される出力を得ることができます。
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]);