如何将过滤假值的JavaScript compact函数改写成动态实现版本
JS过滤假值函数动态实现方案
原代码问题说明
你当前的硬编码实现存在两个明显缺陷:
- 扩展性差,后续需要增减过滤的假值时必须手动修改判断逻辑
- 无法正确过滤
NaN:JS中NaN和任何值做相等比较都返回false,你代码里的state != consts[5]判断永远为真,传入NaN时会被错误保留
优化实现方案
方案1:利用JS内置假值判断(最简洁,推荐)
你要过滤的false、null、0、""、undefined、NaN本身就是JS标准定义的全部假值(falsy value),可以直接用Boolean构造函数做隐式转换,完全不需要手动维护假值列表:
function compact(arr) { // 等同于 arr.filter(item => Boolean(item)) return arr.filter(Boolean) } // 测试 console.log(compact([0, 1, false, 2, "", 3, NaN, null, undefined])) // => [1, 2, 3]
方案2:自定义过滤列表动态匹配(适用需要自定义过滤规则的场景)
如果你后续需要调整过滤的取值范围,可以用Array.includes()做动态判断,不需要硬编码每个索引:
function compact(arr) { // 可随意增减需要过滤的值 const filteredValues = [false, null, 0, "", undefined, NaN] return arr.filter(item => !filteredValues.includes(item)) } // 测试 console.log(compact([0, 1, false, 2, "", 3])) // => [1, 2, 3]
内容的提问来源于stack exchange,提问作者Eduard Koshkelyan
相关产品推荐
相关产品推荐

