av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JavaScript如何優(yōu)化邏輯判斷代碼詳解

瀏覽:4日期:2023-06-02 18:42:33
前言

我們?nèi)粘J褂玫降倪壿嬇袛嗾Z(yǔ)句有 if...else...、switch...case...、do...while...等。

在簡(jiǎn)單場(chǎng)景下,我們可能對(duì)這些語(yǔ)法的性能沒(méi)有什么感覺(jué),但當(dāng)遇到復(fù)雜的業(yè)務(wù)場(chǎng)景時(shí),如果處理不善,就會(huì)出現(xiàn)大量的邏輯嵌套,可讀性差并且難以擴(kuò)展。

千里之行始于足下,編寫(xiě)高可維護(hù)性和高質(zhì)量的代碼,我們就需要從細(xì)節(jié)處入手,我們今天主要討論 JavaScript 中如何優(yōu)化邏輯判斷代碼。

嵌套層級(jí)優(yōu)化

function supply(fruit, quantity) { const redFruits = [’apple’, ’strawberry’, ’cherry’, ’cranberries’]; // 條件 1: 水果存在 if (fruit) {// 條件 2: 屬于紅色水果if (redFruits.includes(fruit)) { console.log(’紅色水果’); // 條件 3: 水果數(shù)量大于 10 個(gè) if (quantity > 10) {console.log(’數(shù)量大于 10 個(gè)’); }} } else {throw new Error(’沒(méi)有水果啦!’); }}

通過(guò)上面這個(gè)例子,我們可以看到:判斷流程中規(guī)中矩,符合現(xiàn)實(shí)世界的映射。但是,因代碼層層嵌套,導(dǎo)致閱讀和維護(hù)都存在困難。

如果傳入了 fruit 參數(shù),則每次執(zhí)行都至少需要經(jīng)過(guò)兩步 if 判斷,在性能上也存在問(wèn)題。

我們來(lái)對(duì)上面的代碼進(jìn)行一下優(yōu)化處理:

function supply(fruit, quantity) { const redFruits = [’apple’, ’strawberry’, ’cherry’, ’cranberries’]; if (!fruit) throw new Error(’沒(méi)有水果啦’); // 條件 1: 當(dāng) fruit 無(wú)效時(shí),提前處理錯(cuò)誤 if (!redFruits.includes(fruit)) return; // 條件 2: 當(dāng)不是紅色水果時(shí),提前 return console.log(’紅色水果’); // 條件 3: 水果數(shù)量大于 10 個(gè) if (quantity > 10) {console.log(’數(shù)量大于 10 個(gè)’); }}

這里主要對(duì)嵌套層級(jí)做了優(yōu)化,提前終止掉了不符合的條件,將三層嵌套減少到了一層,簡(jiǎn)化了代碼結(jié)果結(jié)構(gòu),增強(qiáng)了可閱讀性。

多條件分支的優(yōu)化

相信我們很多人對(duì)下面這種代碼不陌生吧?(想想剛開(kāi)始寫(xiě)代碼那會(huì)啊)

function pick(color) { // 根據(jù)顏色選擇水果 if (color === ’red’) {return [’apple’, ’strawberry’]; } else if (color === ’yellow’) {return [’banana’, ’pineapple’]; } else if (color === ’purple’) {return [’grape’, ’plum’]; } else {return []; }}

我們需要知道一點(diǎn)原則:if else 更適合于條件區(qū)間判斷,而 switch case 更適合于具體枚舉值的分支判斷。

我們使用 switch...case...進(jìn)行一下改寫(xiě):

function pick(color) { // 根據(jù)顏色選擇水果 switch (color) {case ’red’: return [’apple’, ’strawberry’];case ’yellow’: return [’banana’, ’pineapple’];case ’purple’: return [’grape’, ’plum’];default: return []; }}

switch...case... 優(yōu)化之后的代碼看上去格式整齊,思路很清晰,但還是很冗長(zhǎng)。繼續(xù)優(yōu)化:

借助 Object 的 {key: value} 結(jié)構(gòu),我們可以在 Object 中枚舉所有的情況,然后將 key 作為索引,直接通過(guò) Object.key 或者 Object[key] 來(lái)獲取內(nèi)容:

const fruitColor = { red: [’apple’, ’strawberry’], yellow: [’banana’, ’pineapple’], purple: [’grape’, ’plum’],}function pick(color) { return fruitColor[color] || [];}

使用 Map 數(shù)據(jù)結(jié)構(gòu),真正的(key, value) 鍵值對(duì)結(jié)構(gòu):

const fruitColor = new Map() .set(’red’, [’apple’, ’strawberry’]) .set(’yellow’, [’banana’, ’pineapple’]) .set(’purple’, [’grape’, ’plum’]);function pick(color) { return fruitColor.get(color) || [];}

優(yōu)化之后,代碼更簡(jiǎn)潔、更容易擴(kuò)展。

為了更好的可讀性,還可以通過(guò)更加語(yǔ)義化的方式定義對(duì)象,然后使用 Array.filter 達(dá)到同樣的效果:

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);}總結(jié)

上面使用的例子和手段都比較初級(jí),但是其中的思想?yún)s值得我們細(xì)品,希望大家能夠有所收獲!

到此這篇關(guān)于JavaScript如何優(yōu)化邏輯判斷代碼的文章就介紹到這了,更多相關(guān)JavaScript優(yōu)化邏輯判斷代碼內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 成人精品一区二区三区 | 黑人巨大精品欧美一区二区免费 | 天天操人人干 | 中文字幕亚洲国产 | 欧美成人影院 | 日朝毛片| 国产精品精品视频一区二区三区 | 日本久久久久久 | 欧美一级二级三级视频 | 一级毛片在线播放 | 欧美一级精品片在线看 | 黄免费观看视频 | 国产美女特级嫩嫩嫩bbb片 | 欧美一区二区三区日韩 | 久久一区 | 成人国产在线视频 | 欧美一区二区三区视频在线 | 久久久久无码国产精品一区 | 亚洲欧美视频 | 亚洲视频在线播放 | av天空| 高清人人天天夜夜曰狠狠狠狠 | 久久久久国产精品一区二区 | 亚洲综合色自拍一区 | 日韩欧美在线一区 | 亚洲视频精品在线 | 国产伦一区二区三区视频 | 国产精品视频导航 | 久久久男人的天堂 | 人人干人人干人人 | 日韩久久久久久 | 国产日韩一区二区 | 三级视频久久 | 国产一区二区在线视频 | 日韩中文字幕视频在线 | 99re6在线视频精品免费 | 精品一区二区三区在线观看 | 欧美日韩亚洲一区二区 | 天天躁日日躁狠狠躁2018小说 | 99精品视频在线观看免费播放 | 亚洲a网 |