【问题标题】:How to prompt until condition is met?如何提示直到满足条件?
【发布时间】:2015-07-03 04:46:59
【问题描述】:

我试图提示用户直到输入等于数组中的元素之一?

do {
      var bestCities = ["miami","sanfrancisco","austin","chicago","phoenix"]
      var userInput = prompt('Whats your city?');
    } while (
        userInput !== bestCities[i]
      );
    alert('I love ' + i + ' also' );

【问题讨论】:

  • 您将需要遍历数组以检查其中的每个项目。 i在代码中定义在哪里?
  • 您的问题并不是真正的问题。你在努力。好的。那又怎样?

标签: javascript loops prompt


【解决方案1】:

可能是:

var bestCities = ["miami","sanfrancisco","austin","chicago","phoenix"];
var userInput;

do{
  userInput = prompt('Whats your city?') 
} while (bestCities.indexOf(userInput) === -1);

alert('I love ' + userInput + ' also' )

indexOf() 从数组中返回位置。

indexOf 在未找到匹配项时返回 -1。因此,当找到-1 以外的索引时,循环结束。例如miami 位于0 位置,chicago 位于3 位置。

【讨论】:

  • while condition 中的更正,应该是bestCities.indexOf(userInput) === -1,当索引为-1 时循环将继续运行,即仍然找不到任何元素。您可以测试按下Run code snippet 按钮
【解决方案2】:

这是一个更好的架构:

var validCity = false;

while(!validCity) {
    var input = prompt("What is your city");
    if(bestCities.indexOf(input) != -1) validCity = true;
}

【讨论】:

  • 你可以简单地 break 没有额外的变量
  • 抛开语义,我认为的基本思想是交流的。
【解决方案3】:
do {
      var bestCities = ["miami","sanfrancisco","austin","chicago","phoenix"]
      var userInput = prompt('Whats your city?');
    } 
while (bestCities.indexOf(userInput)==-1);
alert('I love ' + userInput  + ' also' );

只需检查数组索引即可解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 2014-10-18
    • 2021-12-24
    相关资源
    最近更新 更多