js中if判断的优化写法

本文介绍了如何利用ES6中的Map对象优化多条件判断的代码,将复杂的if-else结构转换为键值对形式,提高代码可读性和效率。示例中展示了如何根据status和identity两个变量来执行不同的操作,通过将条件组合成字符串作为Map的键,存储对应的处理函数,简化了代码并提高了可维护性。

利用es6中的map对象
(根据status判断执行哪种方法)

const onButtonClick1 = (status)=>{
 if(status == 1){
  sendLog('processing')
  jumpTo('IndexPage')
 }else if(status == 2){
  sendLog('fail')
  jumpTo('FailPage')
 }else if(status == 3){
  sendLog('fail')
  jumpTo('FailPage')
 }else if(status == 4){
  sendLog('success')
  jumpTo('SuccessPage')
 }else if(status == 5){
  sendLog('cancel')
  jumpTo('CancelPage')
 }else {
  sendLog('other')
  jumpTo('Index')
 }
}

修改为:

const actions = new Map([
 [1, ['processing','IndexPage']],
 [2, ['fail','FailPage']],
 [3, ['fail','FailPage']],
 [4, ['success','SuccessPage']],
 [5, ['cancel','CancelPage']],
 ['default', ['other','Index']]
])
const onButtonClick = (status)=>{
 let action = actions.get(status) || actions.get('default')
 sendLog(action[0])
 jumpTo(action[1])
}

当要判断两个变量时
if写法:

const onButtonClick = (status,identity)=>{
 if(identity == 'guest'){
  if(status == 1){
   //do sth
  }else if(status == 2){
   //do sth
  }else if(status == 3){
   //do sth
  }else if(status == 4){
   //do sth
  }else if(status == 5){
   //do sth
  }else {
   //do sth
  }
 }else if(identity == 'master') {
  if(status == 1){
   //do sth
  }else if(status == 2){
   //do sth
  }else if(status == 3){
   //do sth
  }else if(status == 4){
   //do sth
  }else if(status == 5){
   //do sth
  }else {
   //do sth
  }
 }
}

优化写法:

const actions = new Map([
 ['guest_1', ()=>{/*do sth*/}],
 ['guest_2', ()=>{/*do sth*/}],
 ['guest_3', ()=>{/*do sth*/}],
 ['guest_4', ()=>{/*do sth*/}],
 ['guest_5', ()=>{/*do sth*/}],
 ['master_1', ()=>{/*do sth*/}],
 ['master_2', ()=>{/*do sth*/}],
 ['master_3', ()=>{/*do sth*/}],
 ['master_4', ()=>{/*do sth*/}],
 ['master_5', ()=>{/*do sth*/}],
 ['default', ()=>{/*do sth*/}],
])
 
/**
 * 按钮点击事件
 * @param {string} identity 身份标识:guest客态 master主态
 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 开团成功 4 商品售罄 5 有库存未开团
 */
const onButtonClick = (identity,status)=>{
 let action = actions.get(`${identity}_${status}`) || actions.get('default')
 action.call(this)
}

上述代码核心逻辑是:把两个条件拼接成字符串,并通过以条件拼接字符串作为键,以处理函数作为值的Map对象进行查找并执行,这种写法在多元条件判断时候尤其好用。

在帆软报表(FineReport)中,实现参数的嵌套 `if` 语句写法主要用于动态控制数据展示、条件过滤、样式设置等场景。帆软报表支持使用 JavaScript 表达式进行逻辑判断,因此嵌套 `if` 的写法可以采用标准的 JavaScript 语法结构。 ### 嵌套 `if` 的基本写法 在参数或条件判断中,可以通过嵌套 `if` 实现多层级判断逻辑。例如根据用户选择的地区和时间范围动态展示不同的数据内容: ```javascript if (value == "北京") { if (time == "2023") { return "北京2023年数据"; } else if (time == "2022") { return "北京2022年数据"; } else { return "北京其他年份数据"; } } else if (value == "上海") { if (time == "2023") { return "上海2023年数据"; } else { return "上海其他年份数据"; } } else { return "其他地区数据"; } ``` 该写法通过多层 `if-else` 结构实现了根据地区和时间的组合返回不同结果的逻辑控制。 ### 嵌套 `if` 在参数中的应用示例 在帆软报表中,若需根据用户输入的参数动态控制数据集的查询条件,可使用嵌套 `if` 判断参数值并返回对应的 SQL 片段: ```javascript if (paramRegion == "华北") { if (paramType == "销售额") { return "WHERE region IN ('北京', '天津', '河北')"; } else if (paramType == "利润") { return "WHERE region IN ('北京', '天津', '河北') AND profit > 0"; } } else if (paramRegion == "华南") { if (paramType == "销售额") { return "WHERE region IN ('广东', '广西', '海南')"; } else { return "WHERE region IN ('广东', '广西', '海南') AND profit > 0"; } } else { return ""; } ``` 该写法通过嵌套 `if` 实现了根据不同参数组合动态生成 SQL 查询条件,增强了报表的灵活性与交互性。 ### 嵌套 `if` 的优化写法 为提高可读性和维护性,建议将复杂逻辑拆分为多个变量进行判断,例如: ```javascript var isNorth = paramRegion == "华北"; var isSouth = paramRegion == "华南"; var isSales = paramType == "销售额"; if (isNorth) { if (isSales) { return "华北销售额"; } else { return "华北利润"; } } else if (isSouth) { if (isSales) { return "华南销售额"; } else { return "华南利润"; } } else { return "其他地区数据"; } ``` 通过变量拆分,使逻辑判断更清晰,也便于后续维护和调试。 ### 注意事项 - **避免多层嵌套**:过多的嵌套会使代码结构复杂,建议优先使用 `else if` 或 `switch` 语句替代深层嵌套。 - **保持类型一致性**:返回值类型应保持一致,避免因类型不匹配导致的异常。 - **使用大括号**:即使只有一行代码也应使用 `{}`,确保逻辑清晰并防止潜在错误 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值