最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年06月08日 16:32:31   作者:編程三昧  
我們在編寫 JS 代碼時,經(jīng)常會遇到邏輯判斷復(fù)雜的情況,這篇文章主要給大家介紹了關(guān)于JavaScript如何優(yōu)化邏輯判斷代碼的相關(guān)資料,需要的朋友可以參考下

前言

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

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

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

嵌套層級優(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 個
            if (quantity > 10) {
                console.log('數(shù)量大于 10 個');
            }
        }
    } else {
        throw new Error('沒有水果啦!');
    }
}

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

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

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

function supply(fruit, quantity) {
    const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];
    if (!fruit) throw new Error('沒有水果啦');     // 條件 1: 當(dāng) fruit 無效時,提前處理錯誤
    if (!redFruits.includes(fruit)) return; // 條件 2: 當(dāng)不是紅色水果時,提前 return

    console.log('紅色水果');

    // 條件 3: 水果數(shù)量大于 10 個
    if (quantity > 10) {
        console.log('數(shù)量大于 10 個');
    }
}

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

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

相信我們很多人對下面這種代碼不陌生吧?(想想剛開始寫代碼那會啊)

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)行一下改寫:

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)化之后的代碼看上去格式整齊,思路很清晰,但還是很冗長。繼續(xù)優(yōu)化:

借助 Object 的 {key: value} 結(jié)構(gòu),我們可以在 Object 中枚舉所有的情況,然后將 key 作為索引,直接通過 Object.key 或者 Object[key] 來獲取內(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) 鍵值對結(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)化之后,代碼更簡潔、更容易擴(kuò)展。

為了更好的可讀性,還可以通過更加語義化的方式定義對象,然后使用 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é)

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

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

相關(guān)文章

  • 利用HTML與JavaScript實(shí)現(xiàn)注冊頁面源碼

    利用HTML與JavaScript實(shí)現(xiàn)注冊頁面源碼

    這篇文章主要給大家介紹了關(guān)于利用HTML與JavaScript實(shí)現(xiàn)注冊頁面的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對大家實(shí)現(xiàn)注冊頁面具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-12-12
  • Js動態(tài)添加復(fù)選框Checkbox的實(shí)例方法

    Js動態(tài)添加復(fù)選框Checkbox的實(shí)例方法

    Js動態(tài)添加復(fù)選框Checkbox的實(shí)例方法,需要的朋友可以參考一下
    2013-04-04
  • Javascript中八種遍歷方法的執(zhí)行速度深度對比

    Javascript中八種遍歷方法的執(zhí)行速度深度對比

    關(guān)于數(shù)組或?qū)ο蟊闅v,相信很多人都沒有深入觀察過執(zhí)行效率。這是一個曾在群里吵翻天的話題,讀懂后你將成為遍歷效率話題的大師。下面這篇文章主要介紹了Javascript中八種遍歷方法執(zhí)行速度深度對比的相關(guān)資料,需要的朋友可以參考下。
    2017-04-04
  • 一次JavaScript正則的詭異經(jīng)歷記錄

    一次JavaScript正則的詭異經(jīng)歷記錄

    正則表達(dá)式是用于匹配字符串中字符組合的模式,下面這篇文章主要給大家介紹了一次JavaScript正則的詭異經(jīng)歷記錄,文中通過實(shí)例介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • js制作簡易計算器

    js制作簡易計算器

    這篇文章主要為大家詳細(xì)介紹了js制作簡易計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實(shí)例代碼

    Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實(shí)例代碼

    本文通過實(shí)例代碼給大家介紹了Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實(shí)現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-06-06
  • 微信小程序?qū)崿F(xiàn)瀑布流分頁滾動加載

    微信小程序?qū)崿F(xiàn)瀑布流分頁滾動加載

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)瀑布流分頁滾動加載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • JS中一些高效的魔法運(yùn)算符總結(jié)

    JS中一些高效的魔法運(yùn)算符總結(jié)

    這篇文章主要給阿加介紹了關(guān)于JS中一些高效的魔法運(yùn)算符,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • javascript學(xué)習(xí)小結(jié)之prototype

    javascript學(xué)習(xí)小結(jié)之prototype

    本系列博文主要談一些在 javascript 使用中經(jīng)常會混淆的高級應(yīng)用,包括: prototype, closure, scope, this關(guān)鍵字. 對于一個需要提高自己javascript水平的程序員,這些都是必須要掌握的,本節(jié)主要介紹prototype.
    2015-12-12
  • js有趣的非空判斷函數(shù) + ?? 實(shí)現(xiàn)

    js有趣的非空判斷函數(shù) + ?? 實(shí)現(xiàn)

    本文介紹了JS中空值合并操作符??的用法,包括如何使用它來判斷數(shù)據(jù)是否為“合法數(shù)據(jù)”,即非空字符串、非undefined和非null,下面就一起來了解一下,感興趣的可以了解一下
    2024-09-09

最新評論

乐安县| 深圳市| 丰县| 崇礼县| 炎陵县| 梨树县| 大丰市| 台北县| 阳朔县| 大港区| 兴海县| 句容市| 宝兴县| 邻水| 封开县| 黄骅市| 嘉荫县| 云南省| 南开区| 屏东县| 法库县| 从化市| 治县。| 周至县| 揭东县| 府谷县| 思茅市| 邵东县| 东源县| 德州市| 潜江市| 天水市| 隆德县| 茂名市| 桂东县| 应用必备| 宁强县| 嘉祥县| 共和县| 孝感市| 嘉峪关市|