咨询替代多层嵌套条件运算符的更优代码实现方案
优化方案:用映射表替代嵌套条件判断
直接通过对象映射表管理不同s值对应的处理逻辑,彻底解决嵌套混乱、新增数据易崩溃的问题,同时大幅提升代码的可读性与扩展性。
重构后的代码
async function getTargetValue(s, index) { const logicMap = { FFP: () => o.ffp, XP: async () => (await getXP(index, true)) || o.e.xpLvl * o.e.xp, FSC: () => o.fsc, BGP: () => o.bgp, BTN: () => btns[index] || 0, CIV: async () => await getCiv(index) || 0, TIQ: async () => await getTotalInv(index) || 0, IS1: () => isold[index] || 0, ITO: () => acn[index]?.cache?.itemsObtained || 0, FLW: () => flws[index] || 0, PLY: () => acn[index]?.playtime || 0, QSC: () => qusc[index]?.completed || 0, QSR: () => qusc[index]?.rankings || 0, DXP: () => dbs.xp[index] || 0, FPS: () => etcscores.fps[index] || 0, SMN: () => index === "admin_907" ? 1 : 0 }; const handleLogic = logicMap[s]; return handleLogic ? await handleLogic() : "N/A"; }
核心优势
- 可读性极强:所有
s对应的处理逻辑一目了然,无需层层嵌套查找 - 扩展性拉满:新增数据时,仅需在
logicMap中添加一行键值对,完全不影响原有代码,从根源避免新增操作导致的崩溃 - 防错能力提升:用可选链
?.替代直接属性访问(如acn[index]?.cache?.itemsObtained),避免因属性不存在抛出错误,这很可能是你之前新增数据崩溃的核心原因 - 错误处理更灵活:可针对异步逻辑单独添加
try/catch,避免单个逻辑出错影响整体流程
额外优化建议
- 若
o、btns、acn等变量不是全局变量,建议作为参数传入函数,减少全局依赖带来的隐式问题 - 给异步逻辑添加错误捕获,示例:
CIV: async () => { try { return await getCiv(index) || 0; } catch (err) { console.error('获取CIV数据失败:', err); return 0; } },
内容的提问来源于stack exchange,提问作者doctorpepper126
相关产品推荐
相关产品推荐

