首页 > 解决方案 > javascript中过滤器方法的语法结构决定结果

问题描述

我正在处理一个编码问题,我遇到了一些让我陷入循环的东西(不是双关语)。这很简单,但我希望有更多经验的人能说清楚。

我试图这样解决它,但它不起作用(我知道没有必要检查零,但我只是在乱搞,发现了这个“怪癖”)

 const filter_list = (l) => {
      return l.filter(item => {
        if(typeof item === 'number' || item === 0) {
          return item;
      }
   })
 }

它没有通过测试,但是当它像这样编写时,它通过了所有测试:

const filter_list = (l) => l.filter(item => typeof item === 'number' || item === 0);

使它通过测试的第二个版本是什么?有语法上的差异,但逻辑对我来说似乎是一样的。

标签: javascriptalgorithmsyntax

解决方案


逻辑不一样。在您拥有的第一个版本中return item;,您不会item在第二个版本中返回。第二个版本返回条件结果。

第二个版本等价于:

const filter_list = (l) => {
  return l.filter(item => {
    return typeof item === 'number' || item === 0;
  })
}

如果你想缩写第一个函数,它会是:

const filter_list = (l) => l.filter(item => typeof item === 'number' || item === 0 ? item : undefined);

您的条件逻辑也没有多大意义。所有数字都是如此,因此添加|| item === 0不会改变结果。我怀疑你的意思是&&。但是由于您使用的是严格相等,因此无需测试类型——只有一个数字可以严格等于0.


推荐阅读