因此,我正在进行FreeCodeCamp挑战“从数组中删除所有错误的值”。
我做了一个函数,但由于某种原因,它不能过滤所有错误的值:
function bouncer(arr) {
function truthy(value) {
return value !== '' ||false || null || undefined || NaN ;
}
var filtered = arr.filter(truthy);
return filtered;
}
bouncer([7, "ate", "", false, 9]);这应该会返回
[7, "ate", 9], 而是返回
[ 7, 'ate', false, 9 ]如果我改变了函数the的顺序,返回值就会改变。例如,移动“”,
function truthy(value) {
return value !== '' ||false || null || undefined || NaN ;->
return false || null || undefined || NaN || " ; 新的
false || null ||未定义|| NaN ||“;返回
[ 7, 'ate', '', 9 ]知道是怎么回事吗?谢谢!
发布于 2017-12-16 10:08:54
return value !== '' ||false || null || undefined || NaN ;
这并不是你所想的那样。它实际上相当于
(((((value !== '') || false) || null) || undefined) || NaN)当为value !== ''时,就像在大多数情况下一样,该表达式为真。实际上,您需要检查
value !== '' && value !== false && value !== null && value !== undefined && value !== NaN但是,由于这些都是错误的,并且Array.filter只关心真假,所以您可以将truthy函数替换为
function truthy(value) {
return value;
}这甚至不值得为以下内容划分三行:
var filtered = arr.filter(e => e);发布于 2017-12-16 10:38:47
除了AuxTaco's answer之外。
Boolean as function进一步缩短过滤器表达式:
function bouncer(arr) {
return arr.filter(Boolean);
}
console.log(bouncer([7, "ate", "", false, 9, 0, NaN, null, undefined]));
发布于 2017-12-16 10:06:44
问题是,当值不同于空时,您的return语句将始终返回true
function truthy(value) {
return value !== '' ||false || null || undefined || NaN ;
}应该是这样的
function truthy(value) {
falseValues = ['',false,null,undefined,NaN];
return !falseValues.contains(value);
}https://stackoverflow.com/questions/47841877
复制相似问题