You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将过滤假值的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 16:45:06