Skip to content

分支优化

记录如何使用映射,来优化有很多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:无事件')
  }
}

www.yehu.xyz