如何从数组中检测falsy值以替代冗长的多条件if判断?
批量检测数组中是否包含指定falsy值的解决方案
原代码无法运行的原因
你的写法存在两个核心逻辑错误:
indexOf()采用严格相等(===)规则匹配元素,只能匹配到值为false的项,null、''这类你需要检测的falsy值无法被命中indexOf()返回的是第一个匹配元素的下标,你判断返回值===1,只有数组第二个元素是false时才会触发if分支,和你要的「存在任意falsy就触发」的需求完全不符
正确实现方案
方案1:通用falsy检测
如果需要检测所有falsy值(覆盖你提到的false、null、'',同时包含0、undefined、NaN等其他JS内置falsy值),直接用数组的some()方法即可:
if (detailsConditionsArr.some(item => !item)) { console.log("Found a falsy"); }
some()会遍历数组,只要有一个元素满足回调条件就会立刻返回true,符合你的校验需求。
方案2:仅检测指定三类falsy值
如果业务场景中0、undefined等属于有效值,只需要匹配false、null、''三类,可以给回调加精准判断:
const targetFalsy = [false, null, ''] if (detailsConditionsArr.some(item => targetFalsy.includes(item))) { console.log("Found a falsy"); }
低版本浏览器兼容写法
如果需要兼容不支持ES6箭头函数的旧环境,可以把回调换成普通函数写法:
if (detailsConditionsArr.some(function(item) { return !item })) { console.log("Found a falsy"); }
内容的提问来源于stack exchange,提问作者MeltingDog
相关产品推荐
相关产品推荐

