成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何優化JavaScript中的復雜判斷?

開發 前端
將兩個條件拼接成一個字符串,以拼接后的條件字符串為鍵,以處理函數為值,通過 Map 對象進行查找并執行。這種方式在多條件判斷的時候特別有用。

Hello,大家好,我是 Sunday。

我們在寫 JavaScript 代碼的時候,經常會遇到邏輯判斷比較復雜的情況,通常我們可以使用 if/else 或 switch 來實現多個條件判斷。

但是這樣就存在一個問題,隨著邏輯復雜度的增加,代碼中的 if/else/switch 會越來越臃腫,越來越難理解。那么如何才能把判斷邏輯寫得更優雅呢?

今天咱們就來看看這個問題!

一元條件判斷

const onButtonClick = (status)=>{
if(status == 1){
    jumpTo('進入索引頁')
  }elseif(status == 2){
    jumpTo('進入失敗頁')
  }elseif(status == 3){
    jumpTo('進入失敗頁')
  }elseif(status == 4){
    jumpTo('進入成功頁')
  }elseif(status == 5){
    jumpTo('進入取消頁')
  }else {
    jumpTo('其他操作')
  }
}

從代碼中我們可以看到這個按鈕的點擊邏輯:根據不同的活動狀態,進入不同的頁面。

當然,以上代碼也可以通過 switch 進行重寫:

const onButtonClick = (status)=>{
switch (status){
    case1:
      console.log('進入索引頁')
      break
    case2:
    case3:
      jumpTo('進入失敗頁')
      break
    case4:
      jumpTo('進入成功頁')
      break
    case5:
      jumpTo('進入取消頁')
      break
    default:
      jumpTo('其他操作')
      break
  }
}

這樣看起來比用 if/else 要清晰多了。同時:當 case 2 和 case 3 的邏輯相同時,可以省略執行語句和 break,這樣 case 2 就會自動執行 case 3 的邏輯。

但是,以上的代碼還不夠“完美”,我可以對它進行持續優化:

const actions = {
'1': ['進入索引頁'],
'2': ['進入失敗頁'],
'3': ['進入失敗頁'],
'4': ['進入成功頁'],
'5': ['進入取消頁'],
'default': ['其他操作'],
}
const onButtonClick = (status)=>{
let action = actions[status] || actions['default'],
  jumpTo(action[0])
}

這樣優化之后代碼就會清晰很多,這個方法的巧妙之處在于:把判定條件作為對象的屬性名,把處理邏輯作為對象的屬性值,點擊按鈕時通過查找對象屬性進行邏輯判斷,這種寫法特別適合 一元條件 判斷。

多元條件判斷

但是,如果判斷條件變得更加復雜時,以上的操作就不適用了,例如:

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

那么一旦遇到這種復雜的情況,最初的代碼就不適用了。所以,我們需要對最初的邏輯進行優化可以這么做:

const actions = newMap([
  ['guest_1', ()=>{/* ... */}],
  ['guest_2', ()=>{/* ... */}],
  ['guest_3', ()=>{/* ... */}],
  ['guest_4', ()=>{/* ... */}],
  ['guest_5', ()=>{/* ... */}],
  ['master_1', ()=>{/* ... */}],
  ['master_2', ()=>{/* ... */}],
  ['master_3', ()=>{/* ... */}],
  ['master_4', ()=>{/* ... */}],
  ['master_5', ()=>{/* ... */}],
  ['default', ()=>{/* ... */}],
])
const onButtonClick = (identity,status)=>{
let action = actions.get(`${identity}_${status}`) || actions.get('default')
  action.call(this)
}

上述代碼的核心邏輯是:將兩個條件拼接成一個字符串,以拼接后的條件字符串為鍵,以處理函數為值,通過 Map 對象進行查找并執行。這種方式在多條件判斷的時候特別有用。

責任編輯:武曉燕 來源: 程序員Sunday
相關推薦

2025-04-25 08:50:00

JavaScript代碼開發

2024-10-07 12:23:03

字符串Map對象

2024-10-15 15:18:01

JavaScript開發

2020-10-22 08:06:05

JavaScrip語言類型

2009-06-10 22:00:57

JavaScript腳

2009-06-11 17:15:23

JavaScript性

2020-10-22 14:00:31

JavaScript數字變量

2016-08-03 17:23:47

javascripthtml前端

2022-09-12 23:53:53

JavaScript條件判斷開發

2011-05-27 16:00:10

DB2

2013-08-01 13:18:41

代碼

2020-08-23 11:32:21

JavaScript開發技術

2022-09-04 15:40:39

JavaScrip狀態模式軟件

2011-05-25 10:46:39

Javascript

2025-01-07 15:20:24

2024-06-14 08:54:54

2011-07-13 09:46:23

javaScript

2012-03-12 09:33:04

JavaScript

2022-05-26 09:51:50

JavaScrip內存泄漏

2020-12-17 07:52:38

JavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国精产品一品二品国精在线观看 | 国产色婷婷精品综合在线手机播放 | 国产欧美在线视频 | 亚洲深夜福利 | 国产精品国产三级国产aⅴ入口 | 噜久寡妇噜噜久久寡妇 | 免费黄色在线观看 | 亚洲综合色丁香婷婷六月图片 | 免费av直接看| 精品久久一区 | 狠狠综合久久av一区二区小说 | 免费视频二区 | 国产精品久久久亚洲 | 97人人超碰| 成人片网址| 罗宾被扒开腿做同人网站 | 日韩欧美中文字幕在线观看 | 手机av网| 国产精品视频在线播放 | 国产不卡一区 | 亚洲在线一区二区 | 在线观看免费国产 | 日韩一区二区三区在线观看视频 | av不卡一区 | 国产精品亚洲一区二区三区在线 | 中文av字幕 | 亚洲高清视频一区二区 | 久久久999精品 | 少妇av片 | 亚洲一区久久 | 久久精品国产99国产 | 青青草一区 | 久久久一区二区三区四区 | 91免费在线视频 | 亚洲一二三在线 | 亚洲精品日本 | 国产精品免费在线 | 亚洲3p| 欧美精品一区二区三区一线天视频 | 欧美一级大片 | 日韩图区 |