0

下面的代码旨在将数组索引与下一个索引进行比较,如果前一个索引较小,则打印“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");


    }

}
4

3 回答 3

1

当您执行 list[i++] 时,i 的值会增加。您在 for 语句中再次增加它。将 large 分配给 list[i+1] 或删除 for 循环的增量部分。

于 2013-01-26T12:09:51.287 回答
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 运算符如何在这里工作时,您会发现这是有道理的。

如果您要替换此行:

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 增加到 list 的长度以上(这是导致上一次迭代中未定义大的原因),但我会让你自己弄清楚,用于教育目的:)

于 2013-01-26T12:30:58.457 回答
0

应该像这样工作

l = [1,2,3];
for (i = 0; i l.lenght -1; ++i) {
  if (l[i] < l[i+1]) {
    console.log("meh");
  }
}
于 2013-01-26T12:11:33.973 回答