【问题标题】:Q about JavaScript: how can i "reset" switch statement?关于 JavaScript 的问题:我如何“重置”switch 语句?
【发布时间】:2015-04-09 01:09:27
【问题描述】:

switch 语句有不同的情况,但默认情况下会提示用户输入新值。

我希望根据不同的情况检查该新值。如果大小写匹配,则执行相应的代码。但否则,它将默认并重新提示。

如何编写代码来重新检查 switch 语句中的表达式?

var anyLetter; 
anyLetter = prompt("Enter one of the following letters (b, o, or h): "); 

switch(anyLetter)
{
case "b": 
case "B": 
    //code if user enters b or B
    break; 
case "o": 
case "O": 
    //code 
    break; 
case "h": 
case "H": 
    //code
    break; 
default: 
    var anyLetterAgain; 
    anyLetterAgain = prompt("Enter one of the following letters (b, o, or h): "); 
}

我希望用户为 anyLetterAgain 输入的内容通过 switch 语句运行,并继续直到输入 b、o 或 h。请帮忙!谢谢

【问题讨论】:

  • 围绕开关的while(condition) 循环会起作用...

标签: javascript switch-statement


【解决方案1】:

也许使用 while 循环会更合适。例如:

var good = false
while (!good) {
  var l = prompt("Enter one of the following letters (b, o, or h): ");
  if (l == 'o' || l == 'O' || l == 'b' || l == 'B' || l == 'h' || l == 'H') {
    good = true;
    MyOtherFunction(l); //handle the user input here
  } 
}

只是一个想法......

【讨论】:

  • if({o:1,O:1,b:1,B:1,h:1,H:1}[l]){ 更简单,避免了多次评估
  • 谢谢丹达维斯。代码绝对可以优化:)
【解决方案2】:

default的情况下再次调用你的switch block代码所在的函数。

例如:

function askForLetter() {
    var anyLetter; 
    anyLetter = prompt("Enter one of the following letters (b, o, or h): "); 

    switch(anyLetter){
        case "b": 
        case "B": 
            //code if user enters b or B
        break; 
        case "o": 
        case "O": 
            //code 
        break; 
        case "h": 
        case "H": 
            //code
        break; 
        default:
            askForLetter();  
    }
}

【讨论】:

    【解决方案3】:

    虽然上面的所有答案都是正确的,但我需要指出,当您需要包含新选项时,需要对条件进行额外修改,而第二个将很难在这种状态下检索字母本身,这很容易修复,但是由于其递归性质,在某些极端情况下可能会导致堆栈溢出(注意讽刺意味)。 这是我的代码版本:

    var anyLetter = ''; 
    while (anyLetter == '')
    {
        anyLetter = getMyLetter();
    }
    console.log("MyLetter:", anyLetter);
    
    function getMyLetter()
    {
        var letter = prompt("Enter one of the following letters (b, o, or h): "); 
        switch(letter)
        {
            case "b": 
            case "B": 
            {
                //code if user enters b or B
                break; 
            }
            case "o": 
            case "O": 
            {
                //code 
                break; 
            }
            case "h": 
            case "H": 
            {
                //code
                break; 
            }
    
            default: 
            {
                letter = '';
            }
    
        }
        return letter;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 2014-11-25
      • 1970-01-01
      • 2020-06-10
      相关资源
      最近更新 更多