下面的代码旨在将数组索引与下一个索引进行比较,如果前一个索引较小,则打印"yay"。 我想我明白我做错了什么,因为 for 循环正在遍历每个索引,并且我试图在循环通过变量之前将"下一个"索引存储在变量中。我很好奇如何解决这个问题。我可以谷歌一下,但我宁愿看看人们在这里想出了什么。我认为这对学习更好。
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");
}
}
当你做一个列表[i++]时,i的值递增。您将在 for 语句中再次递增它。要么将 large 分配给列表 [i+1],要么删除 for 循环的增量部分。
我刚刚用 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运算符的工作原理时,您会发现这是有道理的。
如果要替换此行:
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 增加到列表的长度以上(这就是导致在上次迭代中未定义大的原因),但我会让你自己弄清楚,出于教育目的:)
应该像这样工作
l = [1,2,3];
for (i = 0; i l.lenght -1; ++i) {
if (l[i] < l[i+1]) {
console.log("meh");
}
}