阅读 114

小程序中switch case如何优化

遇见的问题

最近在开发小程序,代码中需要实现很多业务,难以避免就有很多的判断,根据不同策略运行不同函数的情况存在。获取到字符串,执行对应的函数。

在PHP中,你可以这样子方便的执行

$con = 'hello';
$con(); // hello()

$con = 'king';
$con(); // king()
复制代码

无奈、小程序中,偏偏不支持一个邪恶的函数 eval,但是说来eval is evil也不无道理。效率既不好又不安全,果断放弃了。

怎么办呢

一、 If Else
if(con) {
    // do something
}else if(con){
    // do something
}
......
else{
    // do something
}
复制代码

过多的if else也不好看

二、 switch case

换做switch case会好点,但还是无限的复制代码,很难受:

switch(mf.queue[key]) {
     case 'login':
       // do something
        break;
     case 'chat':
     	// do something
        break;
    ......
     default:
        // do something
	} 
复制代码

如果是简单的字符串转化,也可以考虑使用枚举等。

解决方法

// 业务逻辑
const funA = function(arg){
    // do something
}
const funB = function(arg){
    // do something
}
    ......
    
// Map
const actions = new Map([
    ['funA',funA],
    ['funB',funB]
    ......
])
const choose = function(arg){
    var fun = 'funA'
    actions.get(fun)(arg) // funA(arg)
    actions.get('funB')(arg) // funB(arg)
}

// 暴露方法
module.exports = {
    choose:choose,
}  
复制代码

总结

这样作,会比无限复制的if else 更加机制一点,也算是替代了eval这个方法,记录一下解决方案,高手多多指教。

关注下面的标签,发现更多相似文章
评论