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

原文链接:juejin.im

上一篇:TS下基于Vue Composition API的表单组件化实践
下一篇:call&apply&bind小结

相关推荐

  • 高性能网站搭建-前端性能优化 (附Vue首屏加载时间优化详细方案)

    前言 事实上, 只有的最终用户响应时间是发在从Web服务器获取HTML文档并传送到浏览器中的。如果希望能够有效地减少页面的响应时间,就必须关注剩余的最终用户体验。

    10 个月前
  • 首页白屏优化实践

    前言 自从前端三大框架React、Vue、Angular面世以来,前端开发逐渐趋向规范化、统一化,大多数时候新建前端项目,首先想到使用的技术一定是三大框架之一,框架给前端开发带来了极大的便利和规范...

    7 个月前
  • 首屏优化图片懒加载

    图片懒加载有几个重要的点: 1. 图片 的src放到其他属性上,加统一的类名,供选择和 加样式,比如: 2. js懒加载函数 有几个重点: 1. 获取可视区域的高度,ie9 用win...

    1 年前
  • 项目中数组循环的一个优化案例

    最近在项目中遇到一个性能问题,根据一些select选择框和一些单选按钮的值综合起来对一个数组进行遍历筛选,并获取最终符合条件的数据,但由于这个数组的长度过长,达到6000,甚至更长,所以导致筛选之后的...

    17 天前
  • 面试官:来,给本官讲讲前端页面性能优化及错误处理有哪些?(看你懵不懵)

    题目:提升页面性能的方法有哪些? 1. 资源压缩合并,减少HTTP请求 2. 非核心代码异步加载异步加载方式 异步加载区别 3. 利用浏览器缓存 缓存的分类 缓存原理 4. 使用CD...

    2 年前
  • 阅读体验优化之起点阅读页

    阅读体验优化之起点阅读页 (https://img.javascriptcn.com/003cdc969974e6e03233f563245d972c) 本文作者:刘文涛 原创声明:本文为阅...

    2 年前
  • 重构 - 用各种方式优化自己的函数库

    有时候,我会想:比我优秀的人,比我更努力。我努力有什么用。但是现在我习惯反过来想这句话,别人为什么会比我优秀,就是因为别人比我更努力。与其拼天赋,更不如比行动。 1.前言 最近有几天时间空闲,...

    2 年前
  • 通过定时器、时间分片、Web Worker优化长任务

    提示 希望你能了解什么是 Event Loop(事件循环),以及对 Web Worker 有所了解,以便更容易吸收 什么是长任务 W3C 性能组规定:执行时长大于 50ms 的任务,定义为长任务 ...

    4 个月前
  • 递归函数的理解与优化

    这篇文章主要是我对递归的学习总结 用递归来解决的问题要满足三个条件: 1. 一个问题的解可以分解为几个子问题的解 2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 3. 存...

    4 个月前
  • 这份优化清单,你做了哪些?

    本文由@IT·平头哥联盟首席填坑官∙苏南 分享(https://img.javascriptcn.com/cff77dc08f09ef416a9b01f7805960df "本文由@IT·平头哥联盟首...

    1 年前

官方社区

扫码加入 JavaScript 社区