如何简化every()回调函数中的if else语句?
简化Joi验证的every判断代码
你的问题出在三元表达式的逻辑搞反了:原代码中存在error时返回false,不存在时返回true,而你写的(error) ? true : false刚好是反过来的——有错误时返回true,这和原逻辑矛盾,所以没达到预期效果。
最简简化方案
直接返回!error即可,因为error存在时是真值,取反后为false;不存在时error是undefined(假值),取反后为true,完全匹配原逻辑:
const tickersValid = arrayStocks.every(ticker => !schemaTicker.validate(ticker).error);
分步拆解说明
- 先移除冗余的if-else:原代码的if-else本质就是根据
error是否存在返回相反的布尔值,所以可以直接写成return !error;const tickersValid = arrayStocks.every((ticker) => { const { error } = schemaTicker.validate(ticker); return !error; }); - 进一步压缩:可以省略变量解构和函数体的大括号,直接一行完成,代码更简洁且可读性不受影响。
如果需要保留错误日志的注释,也可以写成:
const tickersValid = arrayStocks.every((ticker) => { const { error } = schemaTicker.validate(ticker); // if(error) console.log('Joi error msg:', error.details[0].message); return !error; });
内容的提问来源于stack exchange,提问作者Nothere
相关产品推荐
相关产品推荐

