简化的开关库

时间:2018-03-03 18:45:54

标签: javascript

有没有办法(如何)实现一个简化交换机使用的库,我的意思是代替它:

switch (value) {

    case 0:
    case 1:
        console.log('0 Or 1');
        break;

    case 2:
    case 3:
        console.log('2 Or 3');
        break;

    default:
        console.warn("I don't know");

}

我们这样做:

switch (value) {

        case 0 || 1: // value === 1 || value === 2 ...
            console.log('0 Or 1');
            break;

        case 2 || 3:
            console.log('2 Or 3');
            break;

        default:
            console.warn("I don't know");

    }

3 个答案:

答案 0 :(得分:2)

这是可能的,你只需要切换true而不是值,并在case表达式中进行比较:

function testSwitch(value) {
  switch (true) {
      case [0,1].includes(value): // value === 1 || value === 2 ...
          console.log('0 Or 1');
          break;

      case [2,3].includes(value):
          console.log('2 Or 3');
          break;

      default:
          console.warn("I don't know");

  }
}

testSwitch(1)
testSwitch(2)
testSwitch(4)

答案 1 :(得分:0)

  

使用switch(true){...},如下所示



var value = parseInt(prompt("Enter a number"));

switch (true) {

  case value === 0 || value === 1:
    console.log('0 Or 1');
    break;

  case value === 2 || value === 3:
    console.log('2 Or 3');
    break;

  default:
    console.warn("I don't know");

}




答案 2 :(得分:0)

您可以switch使用预处理的value ,而不是原来的value

请注意: 虽然你的例子感觉相当骇人听闻,但在大多数情况下都是最明智的解决方案



function test(value) {
  switch (Math.floor(value / 2)) {
  case 0:
    return ('0 or 1');

  case 1:
    return ('2 or 3');

  default:
    return ("I don't know");
  }
}

[0, 1, 2, 3].forEach(v => {
  console.log(`value: ${v}, result: ${test(v)}`);
});