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 相关文章推荐
P3P Header解决Cookie跨域的问题
Mar 12 Javascript
javascript同页面多次调用弹出层具体实例代码
Aug 16 Javascript
二叉树先序遍历的非递归算法具体实现
Jan 09 Javascript
简介JavaScript中valueOf()方法的使用
Jun 05 Javascript
深入浅析JavaScript函数前面的加号和叹号
Jul 09 Javascript
AngularJS中如何使用echart插件示例详解
Oct 26 Javascript
jquery,js简单实现类似Angular.js双向绑定
Jan 13 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
Mar 01 Javascript
vue通过点击事件读取音频文件的方法
May 30 Javascript
微信小程序实现天气预报功能
Jul 18 Javascript
vue router 跳转时打开新页面的示例方法
Jul 28 Javascript
微信小程序开发(二):页面跳转并传参操作示例
Jun 01 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程序的方法
2009/03/09 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
JavaScript常用小技巧小结
2014/12/29 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
简单实现python进度条脚本
2017/12/18 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
自学python用什么系统好
2020/06/23 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
Linux面试题LINUX系统类
2015/11/25 面试题
浅谈react路由传参的几种方式
2021/03/23 Javascript
音乐专业应届生教师求职信
2013/11/04 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang