首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数组中删除Falsy值

从数组中删除Falsy值
EN

Stack Overflow用户
提问于 2017-12-16 09:56:18
回答 3查看 602关注 0票数 0

因此,我正在进行FreeCodeCamp挑战“从数组中删除所有错误的值”。

我做了一个函数,但由于某种原因,它不能过滤所有错误的值:

代码语言:javascript
复制
function bouncer(arr) {

function truthy(value) {
 return value !==  '' ||false || null || undefined || NaN ;
}

 var filtered = arr.filter(truthy);
 return filtered;
}

bouncer([7, "ate", "", false, 9]);

这应该会返回

代码语言:javascript
复制
[7, "ate", 9], 

而是返回

代码语言:javascript
复制
[ 7, 'ate', false, 9 ]

如果我改变了函数the的顺序,返回值就会改变。例如,移动“”,

代码语言:javascript
复制
function truthy(value) {
   return value !==  '' ||false || null || undefined || NaN ;

->

代码语言:javascript
复制
  return false || null || undefined || NaN || " ; 

新的

false || null ||未定义|| NaN ||“;返回

代码语言:javascript
复制
[ 7, 'ate', '', 9 ]

知道是怎么回事吗?谢谢!

EN

回答 3

Stack Overflow用户

发布于 2017-12-16 10:08:54

return value !== '' ||false || null || undefined || NaN ;

这并不是你所想的那样。它实际上相当于

代码语言:javascript
复制
(((((value !== '') || false) || null) || undefined) || NaN)

当为value !== ''时,就像在大多数情况下一样,该表达式为真。实际上,您需要检查

代码语言:javascript
复制
value !==  '' && value !== false && value !== null && value !== undefined && value !== NaN

但是,由于这些都是错误的,并且Array.filter只关心真假,所以您可以将truthy函数替换为

代码语言:javascript
复制
function truthy(value) {
  return value;
}

这甚至不值得为以下内容划分三行:

代码语言:javascript
复制
var filtered = arr.filter(e => e);
票数 5
EN

Stack Overflow用户

发布于 2017-12-16 10:38:47

除了AuxTaco's answer之外。

  1. “所有假值”也包括0。
  2. 您可以通过使用Boolean as function进一步缩短过滤器表达式:

代码语言:javascript
复制
function bouncer(arr) {
  return arr.filter(Boolean);
}

console.log(bouncer([7, "ate", "", false, 9, 0, NaN, null, undefined]));

票数 1
EN

Stack Overflow用户

发布于 2017-12-16 10:06:44

问题是,当值不同于空时,您的return语句将始终返回true

代码语言:javascript
复制
function truthy(value) {
    return value !==  '' ||false || null || undefined || NaN ;
}

应该是这样的

代码语言:javascript
复制
function truthy(value) {
    falseValues = ['',false,null,undefined,NaN];
    return !falseValues.contains(value);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47841877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档