如何最小化switch语句?

时间:2016-09-03 11:49:30

标签: javascript

我使用switch语句处理超过20个案例。它有一种方法可以最小化长开关语句,例如,如下所示:

switch (something) {

    case 1:
        doX();
    break;

    case 2:
        doY();
    break;

    case 3:
        doN();
    break;

    // And so on...

}

修改

正如所有人都在问我必须澄清这是一个javascript问题。

3 个答案:

答案 0 :(得分:0)

您只提供了伪代码。您应该提供实际的代码,以便我可以更好地指导您。无论如何,您可以使用以下简短形式进行长期交换声明。

var cases = {
    1: doX,
    2: doY,
    3: doN
    //......................cases from 4 to 19
    20: doZ
};
if (cases[something]) {
    cases[something]();
}

希望它有所帮助。

答案 1 :(得分:0)

如果某些任务相同,则可以使用。例如:如果对于案例1和案例10,同样的方法doX()发生,您可以这样做:

switch (something) {

    case 1:
    case 10:
        doX();
    break;

    //...

}

此外,如果你有一个共同的任务,你会在很多情况下完成,例如12,13,14,15和16,doA()将被执行。让它成为default案例。它会减少写很多案例。

switch (something) {

    // for case 12, 13, 14, 15, 16
    default:
        doA();
    break;

}

答案 2 :(得分:0)

您可以使用ES6 Map功能创建功能映射,然后只需使用动态键值调用它。



var myMap = new Map(),
      doX = n => console.log(n),
      doY = n => console.log(n*2),
      doN = n => console.log(n/2),
something = 2;
      
myMap.set(1,doX)
     .set(2,doY)
     .set(3,doN);
myMap.get(something)(4);




同样可以由普通对象实现,如



var myMap = {},
      doX = n => console.log(n),
      doY = n => console.log(n*2),
      doN = n => console.log(n/2),
something = 3;
      
myMap[1] = doX;
myMap[2] = doY;
myMap[3] = doN;
myMap[something](4);