如何处理大量if

89 阅读1分钟
  1. 数量较少的判断可以直接使用 if...else...

    1. 优点:写起来很快
    2. 缺点:如果处理大量的逻辑判断,后面的人看起来很痛苦
  2. 对于数量较多的、简单的判断可以使用switch或者映射表

    1. 优点:清晰明了
    2. 缺点:只能处理简单逻辑
// 对于多个值都使用一个逻辑的判断,使用switch
switch (name) {
    case 'a':
    case 'b': {
        console.log('a, b')
        break
    }
    case 'c': {
        console.log('c')
        break
    }
    default: console.log('default')
}

// 对于一对一关系的可以使用映射
const demoMap = {
    a: (name) => {
        console.log('a')
    },
    b: (name) => {
        console.log('b')
    },
    c: (name) => {
        console.log('c')
    },
}

demoMap[testName]()
  1. 对于数量较多、判断较为复杂的可以使用列表并配合 find 或者 filter

    1. 优点:清晰明了,而且能够通过复杂逻辑进行筛选
    2. 缺点: 写起来较为麻烦、因为需要遍历查找,更费性能
function conditionMapDemo () {
    let demo = 0
    const conditionMap = [
        {
            judge: (name) => name !== 'a',
            execute: () => {
                console.log('this is not a')
                console.log(demo++)
            },
        },
        {
            judge: (name) => name !== 'b',
            execute: () => {
                console.log('this is not b')
                console.log(demo++)
            },
        },
        {
            judge: (name) => name !== 'c',
            execute: () => {
                console.log('this is not c')
                console.log(demo++)
            },
        },
    ]
    // 只筛选单个,相当于if... else if
    const executeFunction = conditionMap.find(item => item.judge(testName)).execute
    executeFunction && executeFunction()
    console.log(demo)
    // 筛选所有,相当于if
    const mulExecuteFunction = conditionMap.filter(item => item.judge(testName))
    mulExecuteFunction.forEach(item => item.execute())
    console.log(demo)
}