代码之家  ›  专栏  ›  技术社区  ›  snazzybouche

当我不知道需要对比多少东西时,使用switch语句最简单的方法是什么?

  •  0
  • snazzybouche  · 技术社区  · 6 年前

    所以我有一个终端,用户输入命令。

    我使用命令的第一个短语,并通过switch语句运行它,以确定要做什么。

    switch(phrases[0]) {
        case "boot":
            // Do something
            break;
        case "switch":
        case "app":
        case "change":
        case "switchapp":
        case "changeapp":
            // Do something
            break;
        case "help":
            // Do something
            break;
        case "wipe":
        case "erase":
        case "restart":
        case "forget":
        case "clear":
        case "undo":
            // Do something else here
            break;
        default:
            throw new Error("Unknown command: " + phrases[0]);
    }
    

    请注意,对于每个命令,我都有一些替代方法,以使用户在第一次尝试时更容易选择正确的命令。

    但是-如果我在一个数组中有所有这些选项,而不是硬编码到switch函数中,我如何访问它们?

    我曾考虑过将if/else与.some()结合使用,但这似乎有些笨拙:

    if(bootCommands.some(function(name){return name == phrases[0]}))
        // Do something
    if(switchCommands.some(function(name){return name == phrases[0]})) {
        // Do something
    } else if(helpCommands.some(function(name){return name == phrases[0]})) {
        // Do something
    } else if(wipeCommands.some(function(name){return name == phrases[0]})) {
        // Do something
    } else {
        throw new Error("Unknown command: " + phrases[0]);
    }
    

    当然,还有更简单的方法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Satpal    6 年前

    你仍然可以使用 switch-case 表达式 Array.includes()

    switch(true) {
        case bootCommands.includes(phrases[0]):
            // Do something
            break;
        case wipeCommands.includes(phrases[0]):
            // Do something
            break;
        default:
            throw new Error("Unknown command: " + phrases[0]);
    }
    

    var bootCommands = ["boot"],
      wipeCommands = ["wipe", "erase", "restart", "forget", "clear", "undo"],
      command = "restart";
    
    
    
    switch (true) {
      case bootCommands.includes(command):
        // Do something
        console.log("Boot command: " + command);
        break;
      case wipeCommands.includes(command):
        // Do something
        console.log("Wipe command: " + command);
        break;
      default:
        console.log("Unknown command: " + command);
    }