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



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

最新更新