javascript中过滤方法的语法结构决定结果
Syntax structure of filter method in javascript determines result
我正在处理一个编码问题,我遇到了一些让我陷入困境的事情(没有双关语意)。这很简单,但我希望有更多经验的人能够清楚地说明。
我试图这样解决它,但它不起作用(我知道没有必要检查零,但我只是四处乱逛,发现了这个“怪癖”)
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;
,在第二个版本中没有 return item
。第二个版本 return 是条件结果。
第二个版本相当于:
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
.
我正在处理一个编码问题,我遇到了一些让我陷入困境的事情(没有双关语意)。这很简单,但我希望有更多经验的人能够清楚地说明。
我试图这样解决它,但它不起作用(我知道没有必要检查零,但我只是四处乱逛,发现了这个“怪癖”)
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;
,在第二个版本中没有 return item
。第二个版本 return 是条件结果。
第二个版本相当于:
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
.