暗夜模式
分支优化
记录如何使用映射,来优化有很多if分支代码的技巧
1.基本
下面是一段简单的,使用映射来简化if分支的代码演示
原代码
js
function buy(goods) {
if (goods === '牛奶') {
console.log('价格:10')
} else if (goods === '可乐') {
console.log('价格:20')
} else if (goods === '冰红茶') {
console.log('价格:30')
} else {
console.log('价格:未设置')
}
}
映射后
js
function buy(goods) {
const map = {
牛奶: '价格:10',
可乐: '价格:20',
冰红茶: '价格:30',
}
if (map[goods]) {
console.log(map[goods])
} else {
console.log('价格:未设置')
}
}
2.进阶
现在给每一个商品都添加上不同的事件
js
function buy(goods) {
if (goods === '牛奶') {
console.log('fn:查询牛奶优惠活动')
} else if (goods === '可乐') {
console.log('fn:赠送可乐优惠券')
} else if (goods === '冰红茶') {
console.log('fn:买一赠二')
} else {
console.log('fn:无事件')
}
}
js
function buy(goods) {
const map = {
牛奶: () => console.log('fn:查询牛奶优惠活动'),
可乐: () => console.log('fn:赠送可乐优惠券'),
冰红茶: () => console.log('fn:买一赠二'),
}
if (map[goods]) {
console.log(map[goods]())
} else {
console.log('fn:无事件')
}
}
3.进阶2 (增加条件)
现在给每一个商品都添加上不同的事件
js
function buy(goods, isVip) {
const time = 12
if (goods === '牛奶' || time > 10) {
console.log('fn:牛奶优惠活动')
} else if (goods === '可乐') {
console.log('fn:赠送可乐优惠券')
} else if (goods === '冰红茶' && isVip) {
console.log('fn:买一赠二')
} else {
console.log('fn:无事件')
}
}
js
function buy(goods) {
const map = [
[() => goods === '牛奶' && time > 10, () => console.log('fn:牛奶优惠活动')],
[() => goods === '可乐', () => console.log('fn:赠送可乐优惠券')],
[() => goods === '冰红茶' && isVip, () => console.log('fn:买一赠二')],
]
const target = map.find((item) => item[0]())
if (target) {
target[1]()
} else {
console.log('fn:无事件')
}
}