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

如何优化这段嵌套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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:01:44