如何在JavaScript中便捷移除含数字与布尔值数组里的布尔值?
从混合布尔值与数字的数组中移除布尔值的最简方法
先说明你用filter(Number)不符合预期的原因:filter(Number)的逻辑是把每个元素转成数字后,判断转换结果是否为真值。true转数字是1(属于真值),所以会被保留;false转数字是0(假值),所以被过滤。但这和我们“移除所有布尔类型元素”的需求不匹配——我们要的是不管布尔值是true还是false,都从数组里剔除。
你写出的这个写法:
[1, true, 2, false, 3].filter(x => typeof x === 'number')
就是最简且最准确的方案。它直接通过typeof判断元素类型是否为number,精准过滤掉所有布尔类型(以及其他非数字类型),逻辑清晰无歧义。
如果追求极致代码长度,可以去掉空格简写:
[1, true, 2, false, 3].filter(x=>typeof x==='number')
不过可读性会稍有下降,日常开发更推荐带空格的版本。
额外补充:如果你的数组里只有整数,也可以用Number.isInteger作为过滤函数:
[1, true, 2, false, 3].filter(Number.isInteger)
但这个方法只对整数有效,数组里如果有浮点数(比如2.5)会被误过滤,通用性不如typeof判断的方案。
内容的提问来源于stack exchange,提问作者Jon Snow
相关产品推荐
相关产品推荐

