JavaScript帮助(特别是循环和数组)

JavaScript Help (Loops and Arrays in Particular)

本文关键字:数组 循环 特别是 帮助 JavaScript      更新时间:2023-09-26

因此,我正在为一个必需的javascript类进行赋值,具体涉及几个部分。我们应该创建一个带有数组的猜谜游戏,提示用户猜名字,如果他们与数组中的任何东西匹配,则将其记为点数。

总之,这是主要的代码,我一直在想如何循环代码,所以当用户被提示3次猜测时,每个猜测都会被考虑在内

var sportsArray = ["Football","Basketball","Rollerblading","Hiking","Biking","Swimming"];
var name = prompt("Please enter your name.", "Enter Here");
var arrayGuess = prompt("Guess a sport.", "Enter Here");
var counter;
for (counter = 0; counter < sportsArray.length; counter++) {
    if (arrayGuess === "Football"||"Basketball"||"Rollerblading"||"Hiking"||"Biking"||"Swimming"){
        alert("Good Job");
    } else {
        arrayGuess;
    }
}

因此,目标是提示用户猜测原始数组的一部分,如果他们确实让他们知道了,但如果他们不拿走分数,让他们再次猜测,直到他们猜了3次。

不管怎样,如果有人能伸出援手,我们将不胜感激。

你不能同时将一个项目与一大堆类似的东西进行比较:

if (arrayGuess === "Football"||"Basketball"||"Rollerblading"||"Hiking"||"Biking"||"Swimming")

相反,你必须将其与每个单独的项目进行比较:

if (arrayGuess === "Football"||
    arrayGuess === "Basketball"||
    arrayGuess === "Rollerblading"||
    arrayGuess === "Hiking"||
    arrayGuess === "Biking"||
    arrayGuess === "Swimming")

或者,有更有效的方法可以与多个项目进行比较,例如:

if (" Football Basketball Rollerblading Hiking Biking Swimming ".indexOf(" " + arrayGuess + " ") !== -1)

或者,使用阵列:

if (["Football","Basketball","Rollerblading","Hiking","Biking","Swimming"].indexOf(arrayGuess) !== -1)

或者,如果这种比较经常发生,你会提前构建一个对象并使用它进行查找:

var items = {"Football":true,"Basketball":true,"Rollerblading":true,"Hiking":true,"Biking":true,"Swimming":true};
if (items[arrayGuess] === true)

如果你想在不考虑正确用例的情况下进行比较,那么你可以将用户输入的内容小写,并将其与较低的用例测试值进行比较:

var items = {"football":true,"basketball":true,"rollerblading":true,"hiking":true,"biking":true,"swimming":true};
if (items[arrayGuess.toLowerCase()] === true)

仅供参考,也不清楚你为什么在这里使用循环。不需要循环来提示一次并针对所有可能的运动值进行测试。


如果你必须在一个有循环的数组中循环,那么你可以这样做:

var items = ["football","basketball","rollerblading","hiking","biking","swimming"];
var testVal = arrayGuess.toLowerCase();
var match = -1;
for (var i = 0; i < items.length; i++) {
    if (testVal === items[i]) {
        // found a match
        match = i;
        break;
    }
}
if (match !== -1) {
    // items[match] was the match
} else {
    // no match
}

我在这里看到了一些错误,正如前面提到的,if语句中的比较需要在每次比较变量时引用它。但另外,由于您处于一个基于sportsArray变量长度的循环中,因此最好在if语句中完全不引用字符串,而是执行以下操作:

if (arrayGuess === sportsArray[counter]) {
    // Do stuff here
} else {
    // Do other stuff here
}

此外,您的else子句的行为不会像您预期的那样。您将不得不为它分配一个新值,可能是通过另一个调用来提示。到目前为止,您只引用了变量,这不会有任何作用。如果你需要进行三次猜测,我会在混合中添加一个"else-If"子句,在那里你可以获得变量的新值,一个让else子句显示分数并脱离循环。

if (arrayGuess === sportsArray[counter]) {
    // Add to the score
} else if (counter < 2) {
    // We prompted for the first guess before the loop,
    // so take the second and third here
    arrayGuess = prompt("Guess a sport.", "Enter Here");
} else {
    // Display score then break to exit the loop
    break;
}