小程序中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这个方法,记录一下解决方案,高手多多指教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值