使用数组和for循环教自己算法基础知识。为什么这个for循环不起作用

时间:2013-01-26 12:06:48

标签: javascript arrays for-loop

下面的代码用于比较数组索引和下一个索引,然后如果前一个索引较小则打印“yay”。我想我明白我做错了,因为for循环正在翻阅每个索引,而我试图将“next”索引存储在一个变量中,然后才循环通过它。我很好奇如何解决这个问题。我可以谷歌,但我宁愿看到人们在这里提出了什么。我认为学习更好。

list = [1,2,3,4,5,6,7,8,9];

for(i=0; i<list.length; i++) {
    var small = list[i];
    var large = list[i++];
    if(small<large) {
     document.write("yay");


    }

}

3 个答案:

答案 0 :(得分:1)

当您执行列表[i ++]时,i的值会递增。您在for语句中再次递增它。分配大到列表[i + 1]或删除for循环的增量部分。

答案 1 :(得分:1)

我刚用code-play.com快速尝试了这个,但调试的第一步是检查变量的实际值是什么。我为此目的使用了console.log(),并使用您的确切代码导致:

small: 1
large: 1

small: 3
large: 3

small: 5
large: 5

small: 7
large: 7

small: 9
large: 9

这应该为您提供关于这里发生的事情的第一个线索。正如您所看到的,每次值都相同,每次迭代都会跳过一个数字。现在,当我们查看javascript运算符如何工作here时,您可以看到这是有道理的。

如果你要替换这一行:

var large = list[i++];

这一行:

var large = list[i+1];

您的问题应该得到解决。请注意,++ 1也不起作用,在这种情况下,您将获得以下输出:

small: 1
large: 2
yay
small: 3
large: 4
yay
small: 5
large: 6
yay
small: 7
large: 8
yay
small: 9
large: undefined

那么剩下要做的唯一事情就是检查这些值,这样你就不会在列表长度之上增加i(这就是导致在上一次迭代中未定义大值的原因)但是我会让你弄明白为了自己,出于教育目的:)

答案 2 :(得分:0)

应该像这样工作

l = [1,2,3];
for (i = 0; i l.lenght -1; ++i) {
  if (l[i] < l[i+1]) {
    console.log("meh");
  }
}