下面的代码用于比较数组索引和下一个索引,然后如果前一个索引较小则打印“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");
}
}
答案 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");
}
}