优化if...else分支

101 阅读1分钟

优化if...else分支

function xxx(name){
  if(name === '小明'){
    console.log('我是小明xxx')
  }else if(name === '小红'){
    console.log('我是小红xxx')
  }else if(name === '小王'){
    console.log('我是小王xxx')
  }else{
    console.log('啥也不是')
  }
}

xxx('小王')

该如何优化呢?

function xxx(name){
  const map = {
    小明: '我是小明xxx',
    小红: '我是小红xxx',
    小王: '我是小王xxx'
  }
  if(map[name]){
    console.log(map[name])
  }else{
    console.log('啥也不是')
  }
}
xxx('小王')

这样扩展也方便,这个map对象是可以单独提取到一个文件内

2.0

function speak(name){
  if(name.includes('牛')){
    console.log(name + '哞哞叫')
  }else if(name.endsWith('虎') && name.length <= 3){
    console.log(name + '嗷嗷叫')
  }else if(name.endsWith('猫') && !name.includes('狗')){
    console.log(name + '喵喵叫')
  }else{
    console.log('不知道怎么叫')
  }
}

speak('东北虎')

优化(使用元组)

function speak(name){
  const map = [
    [
      () => name.includes('牛'),
      () => console.log(name + '哞哞叫')
    ],
    [
      () => name.endsWith('虎') && name.length <= 3,
      () => console.log(name + '嗷嗷叫')
    ],
    [
      () => name.endsWith('猫') && !name.includes('狗'),
      () => console.log(name + '喵喵叫')
    ]
  ]
  const res = map.find(m => m[0]())
  if(res){
    res[1]()
  }else{
    console.log('不知道怎么叫')
  }
}

speak('东北虎')