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 相关文章推荐
Extjs学习笔记之三 extjs form更多的表单项
Jan 07 Javascript
Jquery cookie操作代码
Mar 14 Javascript
基于JQuery的多标签实现代码
Sep 19 Javascript
javascript中JSON对象与JSON字符串相互转换实例
Jul 11 Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 Javascript
谈一谈bootstrap响应式布局
May 23 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
Aug 05 Javascript
功能强大的jquery.validate表单验证插件
Nov 07 Javascript
详解Angular.js指令中scope类型的几种特殊情况
Feb 21 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
Jul 21 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
Nov 20 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 Javascript
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相对当前文件include其它文件的方法
2015/03/13 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
php创建无限级树型菜单
2015/11/05 PHP
jQuery实现ichat在线客服插件
2014/12/29 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
Python中常见的数据类型小结
2015/08/29 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
使用Python来开发微信功能
2018/06/13 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
Python高并发和多线程有什么关系
2020/11/14 Python
天巡全球:Skyscanner Global
2017/06/20 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
结婚邀请函范文
2014/01/14 职场文书
初中校园广播稿
2014/02/02 职场文书
运动会班级口号
2014/06/09 职场文书
项目工作说明书
2014/07/29 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
python字符串的一些常见实用操作
2022/04/06 Python
Tomcat starup.bat 脚本实现开机自启动
2022/04/20 Servers