es6中使用map简化复杂条件判断操作实例详解
本文实例讲述了es6中使用map简化复杂条件判断操作。分享给大家供大家参考,具体如下:
复杂逻辑判断时需要写很多if/else,代码可读性较差,可以用es6新增的Map来简化代码
列举六种实例,逐步简化
/**
*按钮点击事件
*@param{number}status活动状态:1开团进行中2开团失败3商品售罄4开团成功5系统取消
*/
constonButtonClick=(status)=>{
if(status==1){
sendLog('processing')jumpTo('IndexPage')
}elseif(status==2){
sendLog('fail')jumpTo('FailPage')
}elseif(status==3){
sendLog('fail')jumpTo('FailPage')
}elseif(status==4){
sendLog('success')jumpTo('SuccessPage')
}elseif(status==5){
sendLog('cancel')jumpTo('CancelPage')
}else{
sendLog('other')jumpTo('Index')
}
}
转化成switch简化:
/**
*按钮点击事件
*@param{number}status活动状态:1开团进行中2开团失败3商品售罄4开团成功5系统取消
*/
constonButtonClick=(status)=>{
switch(status){
case1:
sendLog('processing')
jumpTo('IndexPage')
break
case2:
case3:
sendLog('fail')
jumpTo('FailPage')
break
case4:
sendLog('success')
jumpTo('SuccessPage')
break
case5:
sendLog('cancel')
jumpTo('CancelPage')
break
default:
sendLog('other')
jumpTo('Index')
break
}
}
将判断条件作为对象的属性名,将处理逻辑作为对象的属性值,继续简化:
constactions={
'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系统取消
*/
constonButtonClick=(status)=>{
letaction=actions[status]||actions['default'],
logName=action[0],
pageName=action[1]
sendLog(logName)
jumpTo(pageName)
}
转化成Map简化
constactions=newMap([
[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系统取消
*/
constonButtonClick=(status)=>{
letaction=actions.get(status)||actions.get('default')
sendLog(action[0])
jumpTo(action[1])
}
Map对象和Object对象的区别:Map的键可以是任意值,Map的键值对个数可通过size属性直接获
接下来将问题升级:
除去判断状态还要判断用户身份:
传统写法:
constactions=newMap([
['guest_1',()=>{/*dosth*/}],
['guest_2',()=>{/*dosth*/}],
['guest_3',()=>{/*dosth*/}],
['guest_4',()=>{/*dosth*/}],
['guest_5',()=>{/*dosth*/}],
['master_1',()=>{/*dosth*/}],
['master_2',()=>{/*dosth*/}],
['master_3',()=>{/*dosth*/}],
['master_4',()=>{/*dosth*/}],
['master_5',()=>{/*dosth*/}],
['default',()=>{/*dosth*/}],
])
/**
*按钮点击事件
*@param{string}identity身份标识:guest客态master主态
*@param{number}status活动状态:1开团进行中2开团失败3开团成功4商品售罄5有库存未开团
*/
constonButtonClick=(identity,status)=>{
letaction=actions.get(`${identity}_${status}`)||actions.get('default')
action.call(this)
}
用对象做键值简化:
constactions=newMap([
[{
identity:'guest',
status:1
},()=>{/*dosth*/}],
[{
identity:'guest',
status:2
},()=>{/*dosth*/}],
//...
])
constonButtonClick=(identity,status)=>{
//下面代码使用了数组解构[key,value]=cuurrentValue
letaction=[...actions].filter(([key,value])=>(key.identity==identity&&key.status==status))
action.forEach(([key,value])=>value.call(this))
}
正则作为key
constactions=()=>{
constfunctionA=()=>{/*dosth*/}
constfunctionB=()=>{/*dosth*/}
returnnewMap([
[/^guest_[1-4]$/,functionA],
[/^guest_5$/,functionB],
//...
])
}
constonButtonClick=(identity,status)=>{
letaction=[...actions()].filter(([key,value])=>(key.test(`${identity}_${status}`)))
action.forEach(([key,value])=>value.call(this))
}
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。