如何优化这段嵌套if-else条件判断语句的写法?
优化嵌套if-else逻辑的几种方案
先贴出你提供的原始代码:
if (restroom) { if (fleet) { secondIconM9; } else { secondIcon; } } else { if (fleet) { firstIconM9; } else { fistIcon; } }
这段逻辑核心是通过restroom和fleet两个布尔值的组合,选择对应图标,可以用以下几种更简洁易维护的方式重构:
1. 对象映射法(最推荐,可读性&扩展性拉满)
把两个条件的所有组合做成键值对映射,逻辑一目了然,后续新增条件组合也只需在对象里加条目:
// 嵌套对象形式,结构更贴合原逻辑 const iconMap = { true: { true: secondIconM9, false: secondIcon }, false: { true: firstIconM9, false: fistIcon // 注意:这里疑似拼写错误,建议检查是否为firstIcon } }; const selectedIcon = iconMap[restroom][fleet];
或者用字符串拼接键的形式,写法更紧凑:
const iconMap = { 'true-true': secondIconM9, 'true-false': secondIcon, 'false-true': firstIconM9, 'false-false': fistIcon }; const selectedIcon = iconMap[`${restroom}-${fleet}`];
2. 数组索引法(极简写法,适合固定双布尔分支)
利用布尔值转数字(true→1,false→0)的特性,用二维数组直接索引取值:
const iconMatrix = [ [fistIcon, firstIconM9], // restroom=false时,对应索引0:[fleet=false, fleet=true] [secondIcon, secondIconM9] // restroom=true时,对应索引1:[fleet=false, fleet=true] ]; const selectedIcon = iconMatrix[Number(restroom)][Number(fleet)];
3. 扁平化三元表达式(比嵌套if简洁,但扩展性一般)
如果不想用对象/数组,可以把嵌套三元拆成更易读的形式,避免多层嵌套的混乱:
// 先根据restroom选基础图标组,再根据fleet选具体值 const baseIcons = restroom ? [secondIcon, secondIconM9] : [fistIcon, firstIconM9]; const selectedIcon = baseIcons[Number(fleet)];
或者写成一行(但要注意换行保证可读性):
const selectedIcon = restroom ? (fleet ? secondIconM9 : secondIcon) : (fleet ? firstIconM9 : fistIcon);
小提醒
原代码里的fistIcon看起来像是firstIcon的拼写错误,建议及时修正,避免潜在的变量未定义问题。
内容的提问来源于stack exchange,提问作者Fclass
相关产品推荐
相关产品推荐

