For循环和调用数组

For loops and calling Arrays

我已经对此进行了一些修补,在我弄明白的时候慢慢纠正它,但我现在很困惑。它是提示用户输入名称并根据数组值和 return 检查它。我得到了动议,但似乎仍然不想正常工作。 这是具体说明。

onload = init;
var dwarfs = new Array();
dwarfs[0] = "Doc";
dwarfs[1]= "Grumpy";
dwarfs[2]= "Happy";
dwarfs[3]= "Sleepy";
dwarfs[4]= "Bashful";
dwarfs[5]= "Dopey";
dwarfs[6]= "Sneezy ";

document.getElementsByTagName("a")[4].onclick = 
    function(){
        dwarfCheck();
    }
   function dwarfCheck(){
        var name = window.prompt("Name a Dwarf from Snow White")
        var dwarfFound = false
for(var i=0; i < 7; i++){
        if(name == dwarfs[i])
        dwarfFound = true

    }


window.alert(dwarfFound)
   }
var name = window.prompt("Name a Dwarf from Snow White");
var dwarfFound = false; // You haven't found him yet
for (var i = 0; i < dwarfs.length; i++) {
  if (dwarfs[i] == name) {
    dwarfFound = true; // if dwarf number i is the one you're looking for, then this gets set to true
    break;
  }
}

if (dwarfFound) {
  window.alert("Found " + name + "!");
  dwarfFound = false;
}

好的,有几件事。主要问题出在您的 dwarfCheck 函数中。所以我为你重写了一些内部结构。您不需要传入任何变量,因为您是从函数的提示中获取名称的。您还在遍历数组,因此您一次只处理一个矮人 (dwarf[i])。你只需要确认那个矮人不是你要找的人。如果不是,循环将检查下一个,直到它找到它或检查完所有。我放入了一个 break 语句,这样它就不会在你已经找到矮人之后继续循环(这有什么意义?)。 Window 警报通常应该包含有意义的消息,而不仅仅是 TRUE 或 FALSE。如果你要 运行 多次,你应该在完成后将值设置回 false。 (自己打扫干净是有礼貌的。)

希望对您有所帮助!

var dwarfs = new Array();
dwarfs[0] = "Doc";
dwarfs[1]= "Grumpy";
dwarfs[2]= "Happy";
dwarfs[3]= "Sleepy";
dwarfs[4]= "Bashful";
dwarfs[5]= "Dopey";
dwarfs[6]= "Sneezy ";

上面可以写成

var dwarfs = ["Doc", "Grumpy", "Happy", "Sleepy", "Bashful", "Dopey", "Sneezy"];

更短。 Javascript 允许您以这种方式定义数组。

现在,您的函数 dwarfCheck 被定义为在

中接受参数 x
function dwarfCheck(x){ ....

但是你在调用它时没有在此处传递任何参数

document.getElementsByTagName("a")[4].onclick = 
function(){
    dwarfCheck(); //you are calling dwarfCheck without passing any parameter even though it expects a parameter x!
}

这不会是个问题,只要你没有在这里实际使用预期的参数

var dwarfFound = dwarfs[x]

所以你必须解决这个问题。

然后你的 for 循环很奇怪,但它可以正确编写,就像这样

for(var i=0; i < 7; i++){
    if(name == dwarfs[i]) {
        dwarfFound = true;
        window.alert(dwarfFound);
    }
}

这样您就不需要编写所有这些重复的代码行,循环将节省您的输入时间。

最后,习惯以 ; 结束你的陈述。 Javascript 在大多数情况下允许您省略它,但最好使用它。