jyo*_*006 14 javascript boolean filter
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]);
Run Code Online (Sandbox Code Playgroud)
我只需返回真正的布尔语句,当我运行此代码时,它可以工作.但是,我很困惑,因为我的"if语句"将起作用,无论是b!== true还是b!== false.有人可以解释一下这两种方式的原因吗?
小智 50
显然.filter()是在 ES5 中引入的。
这绝对帮助我了解这里发生的事情。希望能帮助到你!
本质上,写作:
arr.filter(Boolean)
Run Code Online (Sandbox Code Playgroud)
和写一样:
arr.filter( function(x) { return Boolean(x); });
Run Code Online (Sandbox Code Playgroud)
因为Boolean()也是一个函数,它在真时返回真,假时返回假!
例子:
arr.filter(Boolean)
Run Code Online (Sandbox Code Playgroud)
来源:这里。
hel*_*rld 37
我正在解决类似的问题,并想出了这个:
function bouncer(arr) {
return arr.filter(Boolean);
}
bouncer([7, 'ate', '', false, 9]);
// returns ['7','ate','9']
Run Code Online (Sandbox Code Playgroud)
这是因为您返回了值。过滤器函数应该像这样返回真或假:
function bouncer(arr) {
arr = arr.filter(function(x) { console.log(x === true)
if(x !== false) {
return true;
}
});
return arr;
}
Run Code Online (Sandbox Code Playgroud)
或更短:
function bouncer(arr) {
return arr.filter(function(x) { console.log(x === true)
return x !== false;
});
}
Run Code Online (Sandbox Code Playgroud)
小智 6
最简单的方法:
function bouncer(arr) {
return arr.filter(x => !!x);
}
Run Code Online (Sandbox Code Playgroud)
你的函数的行为是因为布尔比较中的 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]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24585 次 |
最近记录: |