JavaScript如何優化邏輯判斷代碼詳解
前言
我們日常使用到的邏輯判斷語句有 if…else…、switch…case…、do…while…等。
在簡單場景下,我們可能對這些語法的性能沒有什麼感覺,但當遇到復雜的業務場景時,如果處理不善,就會出現大量的邏輯嵌套,可讀性差並且難以擴展。
千裡之行始於足下,編寫高可維護性和高質量的代碼,我們就需要從細節處入手,我們今天主要討論 JavaScript 中如何優化邏輯判斷代碼。
嵌套層級優化
function supply(fruit, quantity) { const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; // 條件 1: 水果存在 if (fruit) { // 條件 2: 屬於紅色水果 if (redFruits.includes(fruit)) { console.log('紅色水果'); // 條件 3: 水果數量大於 10 個 if (quantity > 10) { console.log('數量大於 10 個'); } } } else { throw new Error('沒有水果啦!'); } }
通過上面這個例子,我們可以看到:判斷流程中規中矩,符合現實世界的映射。但是,因代碼層層嵌套,導致閱讀和維護都存在困難。
如果傳入瞭 fruit 參數,則每次執行都至少需要經過兩步 if 判斷,在性能上也存在問題。
我們來對上面的代碼進行一下優化處理:
function supply(fruit, quantity) { const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; if (!fruit) throw new Error('沒有水果啦'); // 條件 1: 當 fruit 無效時,提前處理錯誤 if (!redFruits.includes(fruit)) return; // 條件 2: 當不是紅色水果時,提前 return console.log('紅色水果'); // 條件 3: 水果數量大於 10 個 if (quantity > 10) { console.log('數量大於 10 個'); } }
這裡主要對嵌套層級做瞭優化,提前終止掉瞭不符合的條件,將三層嵌套減少到瞭一層,簡化瞭代碼結果結構,增強瞭可閱讀性。
多條件分支的優化
相信我們很多人對下面這種代碼不陌生吧?(想想剛開始寫代碼那會啊)
function pick(color) { // 根據顏色選擇水果 if (color === 'red') { return ['apple', 'strawberry']; } else if (color === 'yellow') { return ['banana', 'pineapple']; } else if (color === 'purple') { return ['grape', 'plum']; } else { return []; } }
我們需要知道一點原則:if else 更適合於條件區間判斷,而 switch case 更適合於具體枚舉值的分支判斷。
我們使用 switch…case…進行一下改寫:
function pick(color) { // 根據顏色選擇水果 switch (color) { case 'red': return ['apple', 'strawberry']; case 'yellow': return ['banana', 'pineapple']; case 'purple': return ['grape', 'plum']; default: return []; } }
switch…case… 優化之後的代碼看上去格式整齊,思路很清晰,但還是很冗長。繼續優化:
借助 Object 的 {key: value} 結構,我們可以在 Object 中枚舉所有的情況,然後將 key 作為索引,直接通過 Object.key 或者 Object[key] 來獲取內容:
const fruitColor = { red: ['apple', 'strawberry'], yellow: ['banana', 'pineapple'], purple: ['grape', 'plum'], } function pick(color) { return fruitColor[color] || []; }
使用 Map 數據結構,真正的(key, value) 鍵值對結構:
const fruitColor = new Map() .set('red', ['apple', 'strawberry']) .set('yellow', ['banana', 'pineapple']) .set('purple', ['grape', 'plum']); function pick(color) { return fruitColor.get(color) || []; }
優化之後,代碼更簡潔、更容易擴展。
為瞭更好的可讀性,還可以通過更加語義化的方式定義對象,然後使用 Array.filter 達到同樣的效果:
const fruits = [ {name: 'apple', color: 'red'}, {name: 'strawberry', color: 'red'}, {name: 'banana', color: 'yellow'}, {name: 'pineapple', color: 'yellow'}, {name: 'grape', color: 'purple'}, {name: 'plum', color: 'purple'} ]; function pick(color) { return fruits.filter(f => f.color == color); }
總結
上面使用的例子和手段都比較初級,但是其中的思想卻值得我們細品,希望大傢能夠有所收獲!
到此這篇關於JavaScript如何優化邏輯判斷代碼的文章就介紹到這瞭,更多相關JavaScript優化邏輯判斷代碼內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 8個JavaScript條件語句優化小技巧分享
- 淺談JS如何寫出漂亮的條件表達式
- JavaScript簡寫技巧
- 總結分享10 個超棒的 JavaScript 簡寫技巧
- 24個實用JavaScript 開發技巧