JavaScript判断falsy值实现数组仅加入有效值的方法
问题根因
你当前使用的!!value && value写法无法实现预期效果,核心原因是:逻辑与(&&)运算始终会返回参与运算的其中一个操作数,当value为falsy值时,!!value的运算结果是false,整个表达式最终返回false,这个值会被作为固定数组成员插入数组,不会自动“跳过”,因此最终得到[5, false]而非预期的[5]。
可行实现方案
以下几种写法都可以实现「仅当值为真值时才加入数组」的需求:
- 条件展开写法(ES6+ 最简洁的字面量写法)
利用展开运算符的特性,真值时展开单元素数组插入值,falsy时展开空数组不插入任何内容:const value = '' const example = [5, ...(value ? [value] : [])] // 运行结果:[5] - 条件push写法(兼容性最好、逻辑最直观)
先初始化基础数组,判断值为真时再调用push追加元素,所有JS环境均支持:const value = '' const example = [5] if (value) example.push(value) // 运行结果:[5] - 布尔过滤写法(适合批量过滤场景)
先把所有候选值放入数组,再用Boolean构造函数作为过滤回调,筛掉所有falsy值:
注意:该方案会过滤全部falsy值,包括const value = '' const example = [5, value].filter(Boolean) // 运行结果:[5]0、''、false、null、undefined、NaN,如果业务场景下需要保留0这类合法的非真值,不要使用该方案。
内容的提问来源于stack exchange,提问作者Riky Andreas
相关产品推荐
相关产品推荐

