javascript - 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);
使它通过测试的第二个版本是什么?有语法上的差异,但逻辑对我来说似乎是一样的。
解决方案
逻辑不一样。在您拥有的第一个版本中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
.
推荐阅读
- python-3.x - Python3音轨和视频的持续时间不一致
- macos - 模块“FBLPromises”的 Umbrella 标头不包括标头“/Headers/PromisesObjC-umbrella.h”
- python - 我不能随机运行 driver.refresh () 次数吗?
- kubernetes-helm - 如何在 Kubernetes 上调试 Pod 的初始化
- python - 使用列列表从现有数据框创建数据框
- python-3.x - 如何在python中返回偶数参数列表?
- python - 高效计算对称函数
- python - 多数据库和非托管模型 - 测试用例失败
- php - 不在 PHP 的对象上下文中使用 $this 时出错
- laravel - CentOS 7 上的 Nginx 服务器块