For 循环和提示

For loop and prompt

提问人:gojic 提问时间:5/20/2016 更新时间:5/20/2016 访问量:111

问:

您好,我的代码有什么问题:

var question = prompt("What is your favorite cars?");
var cars = ["BMW", "Volvo", "Saab", "Ford"];

for (cars = 0; cars <= 3; cars+= 3) {
  if (question === cars) {
    alert("That is a great car!");
  } else {
    alert("Nah, there is better choices!");
  }
}

即使您从阵列中插入一些汽车,它也不会激活第一个警报。但是当我将符号从 === 更改为 !== 时,第一个警报就会被激活。

现在我以为它是这样的:当我提出问题并且用户从我的数组中插入答案时,如果答案等于(===)我的数组(cars)第一个警报将运行,如果不是(else),那么我的第二个警报应该运行。但在这种情况下,只有我的第二个警报运行用户的答案。 我知道有可能在没有“for loop”的情况下做到这一点,但我必须尝试这种方式。 是我的代码错了,还是我的逻辑错了?

javascript for 循环 命令提示符

评论


答:

3赞 Thomas Devos 5/20/2016 #1

你可能想看看这里。循环访问 cars 数组中的项的方式不正确。

var question = prompt("What is your favorite cars?");
var cars = ["BMW", "Volvo", "Saab", "Ford"];

for (i = 0; i < cars.length; i++) {
  if (question === cars[i]) {
    alert("That is a great car!");
    break;
  } else {
    alert("Nah, there is better choices!");
    break;
  }
}

1赞 Verthosa 5/20/2016 #2

你在代码中犯了很多错误。您可能想要的是:

var inArray = false;
var question = prompt("What is your favorite cars?");
var cars = ["BMW", "Volvo", "Saab", "Ford"];

for (i = 0; i < cars.length; i++) { 
  if (question === cars[i]) {
    inArray = true;
  }
}

if(inArray){
    alert('great');
}else{
    alert('nah');
}

1) 你的 for 循环构造错误 - 你应该遍历数组的长度 2)如果你把你的警报放在forloop中,它会给出与你的数组中的项目数量相等的弹出窗口(由于else条件) 3) 使用 cars[i] 检查数组中项目的相等性,而不是针对总数组 (cars)

评论

0赞 gojic 5/20/2016
谢谢!如果不是太过分,请你用几句话解释一下,你在这里做了什么?
2赞 David 5/20/2016 #3

首先,您可以在此处定义变量:cars

var cars = ["BMW", "Volvo", "Saab", "Ford"];

但是在下一行,将其完全替换为:0

cars = 0

如果要存储多个内容,请使用多个变量:

var cars = ["BMW", "Volvo", "Saab", "Ford"];
for (var i = 0; i <= 3; i += 3) {
    //...

此外,这永远不会是真的:

if (question === cars) {

因为是当前代码中的数字 () 或我的版本中的数组,并且是字符串(用户的响应)。如果要与数组中的值进行比较,可能需要以下内容:cars0question

if (question === cars[i]) {

除此之外,目前还不清楚你在逻辑上试图在这个循环中做什么。它只会迭代一次,因为您立即将 3 添加到终止循环的递增值上(因为循环最多只能达到 3)。因此,如果您只是想将它与数组中的第一个值进行比较,并且与该值进行比较,则根本不需要循环。

或者,如果您尝试遍历整个数组,那么从逻辑上讲,您将收到 4 条消息。其中一条可能是第一条消息,其余的将是第二条消息。这可能会让用户感到困惑。

3赞 sinisake 5/20/2016 #4

无需循环:

var question = prompt("What is your favorite cars?");
var cars = ["BMW", "Volvo", "Saab", "Ford"];


  if (cars.indexOf(question)!==-1) {
    alert("That is a great car!");
  } else {
    alert("Nah, there is better choices!");
  }

你可以使用 indexOf 方法搜索数组...

1赞 Kurenai Kunai 5/20/2016 #5

var question = prompt("What is your favorite cars?");
var cars = ["BMW", "Volvo", "Saab", "Ford"];

for (i = 0; i <= 3; i++) {
  if (question === cars[i]) {
    alert("That is a great car!");
  } else {
    alert("Nah, there is better choices!");
  }
}

1赞 user6361605 5/20/2016 #6

请看下面。您需要访问 cars 数组中的各个元素,并在 for 循环中增量为 1。

var question = prompt("What is your favorite cars?");
var cars = ["BMW", "Volvo", "Saab", "Ford"];

for (i= 0; i < 3; i+= 1) {
  if (cars[i] === question) {
    alert("That is a great car!");
  } else {
    alert("Nah, there is better choices!");
  }
}