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

如何简化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);

分步拆解说明

  1. 先移除冗余的if-else:原代码的if-else本质就是根据error是否存在返回相反的布尔值,所以可以直接写成return !error;
    const tickersValid = arrayStocks.every((ticker) => {
        const { error } = schemaTicker.validate(ticker);
        return !error;
    });
    
  2. 进一步压缩:可以省略变量解构和函数体的大括号,直接一行完成,代码更简洁且可读性不受影响。

如果需要保留错误日志的注释,也可以写成:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:10:31