es6中使用map简化复杂条件判断操作实例详解


Posted in Javascript onFebruary 19, 2020

本文实例讲述了es6中使用map简化复杂条件判断操作。分享给大家供大家参考,具体如下:

复杂逻辑判断时需要写很多if/else,代码可读性较差,可以用es6新增的Map来简化代码

列举六种实例,逐步简化

/**
 * 按钮点击事件
 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 商品售罄 4 开团成功 5 系统取消
 */
const onButtonClick = (status) => {
 if (status == 1) {
  sendLog('processing') jumpTo('IndexPage')
 } else if (status == 2) {
  sendLog('fail') jumpTo('FailPage')
 } else if (status == 3) {
  sendLog('fail') jumpTo('FailPage')
 } else if (status == 4) {
  sendLog('success') jumpTo('SuccessPage')
 } else if (status == 5) {
  sendLog('cancel') jumpTo('CancelPage')
 } else {
  sendLog('other') jumpTo('Index')
 }
}

转化成switch简化:

/**
 * 按钮点击事件
 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 商品售罄 4 开团成功 5 系统取消
 */
const onButtonClick = (status) => {
 switch (status) {
  case 1:
   sendLog('processing')
   jumpTo('IndexPage')
   break
  case 2:
  case 3:
   sendLog('fail')
   jumpTo('FailPage')
   break
  case 4:
   sendLog('success')
   jumpTo('SuccessPage')
   break
  case 5:
   sendLog('cancel')
   jumpTo('CancelPage')
   break
  default:
   sendLog('other')
   jumpTo('Index')
   break
 }
}

将判断条件作为对象的属性名,将处理逻辑作为对象的属性值,继续简化:

const actions = {
 '1': ['processing', 'IndexPage'],
 '2': ['fail', 'FailPage'],
 '3': ['fail', 'FailPage'],
 '4': ['success', 'SuccessPage'],
 '5': ['cancel', 'CancelPage'],
 'default': ['other', 'Index'],
}
/**
 * 按钮点击事件
 * @param {number} status 活动状态:1开团进行中 2开团失败 3 商品售罄 4 开团成功 5 系统取消
 */
const onButtonClick = (status) => {
 let action = actions[status] || actions['default'],
  logName = action[0],
  pageName = action[1]
 sendLog(logName)
 jumpTo(pageName)
}

转化成Map简化

const actions = new Map([
 [1, ['processing', 'IndexPage']],
 [2, ['fail', 'FailPage']],
 [3, ['fail', 'FailPage']],
 [4, ['success', 'SuccessPage']],
 [5, ['cancel', 'CancelPage']],
 ['default', ['other', 'Index']]
])
/**
 * 按钮点击事件
 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 商品售罄 4 开团成功 5 系统取消
 */
const onButtonClick = (status) => {
 let action = actions.get(status) || actions.get('default')
 sendLog(action[0])
 jumpTo(action[1])
}

Map对象和Object对象的区别:Map的键可以是任意值,Map的键值对个数可通过size属性直接获

接下来将问题升级:

除去判断状态还要判断用户身份:

传统写法:

const actions = new Map([
 ['guest_1', () => { /*do sth*/ }],
 ['guest_2', () => { /*do sth*/ }],
 ['guest_3', () => { /*do sth*/ }],
 ['guest_4', () => { /*do sth*/ }],
 ['guest_5', () => { /*do sth*/ }],
 ['master_1', () => { /*do sth*/ }],
 ['master_2', () => { /*do sth*/ }],
 ['master_3', () => { /*do sth*/ }],
 ['master_4', () => { /*do sth*/ }],
 ['master_5', () => { /*do sth*/ }],
 ['default', () => { /*do sth*/ }],
])
/**
 * 按钮点击事件
 * @param {string} identity 身份标识:guest客态 master主态
 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 开团成功 4 商品售罄 5 有库存未开团
 */
const onButtonClick = (identity, status) => {
 let action = actions.get(`${identity}_${status}`) || actions.get('default')
 action.call(this)
}

用对象做键值简化:

const actions = new Map([
 [{
  identity: 'guest',
  status: 1
 }, () => { /*do sth*/ }],
 [{
  identity: 'guest',
  status: 2
 }, () => { /*do sth*/ }],
 //...
])
const onButtonClick = (identity, status) => {
 //下面代码使用了数组解构 [key,value] = cuurrentValue
 let action = [...actions].filter(([key, value]) => (key.identity == identity && key.status == status))
 action.forEach(([key, value]) => value.call(this))
}

正则作为key

const actions = () => {
 const functionA = () => { /*do sth*/ }
 const functionB = () => { /*do sth*/ }
 return new Map([
  [/^guest_[1-4]$/, functionA],
  [/^guest_5$/, functionB],
  //...
 ])
}
const onButtonClick = (identity, status) => {
 let action = [...actions()].filter(([key, value]) => (key.test(`${identity}_${status}`)))
 action.forEach(([key, value]) => value.call(this))
}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery 源码分析笔记(3) Deferred机制
Jun 19 Javascript
JS获取当前日期时间并定时刷新示例
Mar 04 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
Aug 24 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
认识Knockout及如何使用Knockout绑定上下文
Dec 25 Javascript
JavaScript构造函数详解
Dec 27 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
Mar 29 Javascript
微信小程序商城项目之商品属性分类(4)
Apr 17 Javascript
windows下vue-cli导入bootstrap样式
Apr 25 Javascript
json对象及数组键值的深度大小写转换问题详解
Mar 30 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
Nov 29 Javascript
vuex的数据渲染与修改浅析
Nov 26 Vue.js
JS继承定义与使用方法简单示例
Feb 19 #Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
Feb 19 #Javascript
vue中实现回车键登录功能
Feb 19 #Javascript
Vue中实现回车键切换焦点的方法
Feb 19 #Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 #Javascript
Vue常用的全选/反选的示例代码
Feb 19 #Javascript
详解node和ES6的模块导出与导入
Feb 19 #Javascript
You might like
php的ajax简单实例
2014/02/27 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
php中如何执行linux命令详解
2018/11/06 PHP
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
浅谈Python实现2种文件复制的方法
2018/01/19 Python
简单实现python聊天程序
2018/04/01 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
详解python 注释、变量、类型
2018/08/10 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
python3.6实现学生信息管理系统
2019/02/21 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
师范院校学生自荐信范文
2013/12/27 职场文书
文秘人员工作职责
2014/01/31 职场文书
中式婚礼主持词
2014/03/13 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
工人先进事迹材料
2014/12/26 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript