挑战篝火:Falsy Bouncer有问题。
用户代理是: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36
。
Falsy Bouncer 的说明表明 Falsy 值具有各种类型,包括NaN 。
第一个测试要求函数调用bouncer([7, "ate", "", false, 9])应该返回[7, "ate", 9]
但是请注意,字符串“ate”是NaN,因此它不应包含在结果数组中。
因此,似乎没有办法使用相同的代码块通过测试 1 和测试 3,它们是相互排斥的答案。
我的代码:
function bouncer(arr) {
arr = arr.filter(function(val){
if (val === false || val === null || val === undefined || val === "" || val === 0 || isNaN(val)) return false;
return true;
});
return arr;
}
bouncer([false, null, 0, NaN, undefined, ""]);
如果我在这里误解了一些东西,请提前道歉。
NaN
是变量可以具有的实际值,它是错误的。 "ate"
不是数字, isNan("ate")
会返回true,但是"ate"
值不是falsey,只有NaN
的特定值是falsey。 falsey 值的美妙之处(和偶尔的错误来源)是你不需要像你的代码那样明确地寻找它们,因为每当需要一个布尔值时,Javascript 都会将它们强制转换为 false 的布尔值。 这意味着您的过滤器函数的代码可以是这样的:
arr = arr.filter(function(val){
return val;
});
感谢和快乐编码!
而且,从技术上讲,您可以使用Boolean
函数为您完成此操作,因此可以解决问题:
return arr.filter(Boolean)
,因为布尔值采用真/假值并返回真或假。
最有用的评论
而且,从技术上讲,您可以使用
Boolean
函数为您完成此操作,因此可以解决问题:return arr.filter(Boolean)
,因为布尔值采用真/假值并返回真或假。