关于多层if-else嵌套语句的优化

156 阅读1分钟

1.要是结构简单,可以通过swtich语法替代

    switch (condition) { 
    case 1: 
    // code block break;
    case 2: 
    // code block break;
    default: 
    // code block
   }

2.使用对象字面量替换

    const actions = { 
        1: function(o) { 
        // code block 
        }, 
        200: function(o) {
        // code block 
        }, 
        404: function(o) { 
        // code block 
        }
    }
    function condition(type,obj){
        const handler = action[type]
        handler && action[type](obj)
    }
    condition(1)
    condition(200)
    condition(404)

考虑到我目前在线客服实时通信中的一种情形,下面简述优化一下

//原代码,通过websocket接收消息,携带的大批量参数,调用一个onko方法
onko(a,b,c,d,e,f,g,h,i,j,k,type)
function onko(a,b,c,d,e,f,g,h,i,j,k,type){
    cosnt msg_id = "msg_id"+a   //有使用到参数
    if(type==1){
        //do something
    }else if(type==200){
        //do something
    }else if(type==400){
        //do something
    }else{
        //do something
    }
}

考虑到上面对象字面量优化方案的方法内可能也有使用到onko()参数,一个一个再传到方法内麻烦,而且这if-else判断外也有使用到onko()参数,做了如下优化:

//原代码,通过websocket接收消息,携带的大批量参数,调用一个onko方法
onko({a,b,c,d,e,f,g,h,i,j,k,type})
function onko(opt){
    const {a,b,c,d,e,f,g,h,i,j,k,type} = opt  //解构出来
    cosnt msg_id = "msg_id"+a   //直接使用
    condition(type,opt)  //一行代码把if-else优化了,且符合程序设计solid原则的开放封闭原则
}