逻辑判断多种形式
1. if else
javascript
/**
* 按钮点击事件
* @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')
}
}
2. switch 改写
javascript
/**
* 按钮点击事件
* @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
}
}
3. 对象改写
以类型做 key,相应逻辑跳转为 value
javascript
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)
}
4. Map 改写
javascript
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])
}
拓展:双重判断条件
1. 对象改写
javascript
const actions = {
guest_1: ['processing', 'IndexPage'],
guest_2: ['fail', 'FailPage'],
guest_3: ['fail', 'FailPage'],
guest_4: ['success', 'SuccessPage'],
master_5: ['cancel', 'CancelPage'],
default: ['other', 'Index'],
}
/**
* 按钮点击事件
* @param {string} identity 身份标识:guest客态 master主态
* @param {number} status 活动状态:1 开团进行中 2 开团失败 3 开团成功 4 商品售罄 5 有库存未开团
*/
const onButtonClick = (identity, status) => {
let action = actions[`${identity}_${status}`] || actions['default'],
logName = action[0],
pageName = action[1]
sendLog(logName)
jumpTo(pageName)
}
2. Map 改写,以字符串为 key,并将处理逻辑做 value
javascript
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)
}
3. Map: 以对象做 key,处理逻辑为 value
javascript
如果有些同学觉得把查询条件拼成字符串有点别扭,那还有一种方案,就是用Map对象,以Object对象作为key:
const actions = new Map([
[{identity:'guest',status:1},()=>{/*do sth*/}],
[{identity:'guest',status:2},()=>{/*do sth*/}],
//...
])
const onButtonClick = (identity,status)=>{
let action = [...actions].filter(([key,value])=>(key.identity == identity && key.status == status))
action.forEach(([key,value])=>value.call(this))
}
4. 处理逻辑相同的情况处理
将处理逻辑函数进行缓存:
javascript
const actions = () => {
const functionA = () => {
/*do sth*/
}
const functionB = () => {
/*do sth*/
}
return new Map([
[{ identity: 'guest', status: 1 }, functionA],
[{ identity: 'guest', status: 2 }, functionA],
[{ identity: 'guest', status: 3 }, functionA],
[{ identity: 'guest', status: 4 }, functionA],
[{ identity: 'guest', status: 5 }, functionB],
//...
])
}
const onButtonClick = (identity, status) => {
let action = [...actions()].filter(
([key, value]) => key.identity == identity && key.status == status,
)
action.forEach(([key, value]) => value.call(this))
}
5. 更进一步,利用正则匹对
javascript
const actions = () => {
const functionA = () => {
/*do sth*/
}
const functionB = () => {
/*do sth*/
}
const functionC = () => {
/*send log*/
}
return new Map([
[/^guest_[1-4]$/, functionA],
[/^guest_5$/, functionB],
[/^guest_.*$/, functionC],
//...
])
}
const onButtonClick = (identity, status) => {
let action = [...actions()].filter(([key, value]) => key.test(`${identity}_${status}`))
action.forEach(([key, value]) => value.call(this))
}
主要利用了 map 的 key 可以为任意类型。
- if/else
- switch
- 一元判断时:存到 Object 里
- 一元判断时:存到 Map 里
- 多元判断时:将 condition 拼接成字符串存到 Object 里
- 多元判断时:将 condition 拼接成字符串存到 Map 里
- 多元判断时:将 condition 存为 Object 存到 Map 里
- 多元判断时:将 condition 写作正则存到 Map 里