嵌套JavaScript“ for”循环-为什么第一个循环没有遍及整个长度?

时间:2019-10-31 14:03:02

标签: javascript

这是我的代码:

let arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

for (let i = 0; i < arr.length; i++) {
  for (let y = i + 1; y < arr.length; y++) {
    for (let x = y + 1; x < arr.length; x++) {
      console.log(`${arr[i]}${arr[y]}${arr[x]} ${i} ${y} ${x}`)
    }
  }
}

我不明白为什么我的第一个for循环只会在“ e”迭代并停止之前运行。所以最后一行看起来像这样:efg 4 5 6

据我所知,它之所以停止,是因为最后一个for循环达到了极限,使得倒数第二个也停止了,因为没有更多的代码可以运行,这使得第一个也停止了。

那么,我是否可以假设这一点?

是因为嵌套的for循环用完了吗?

这意味着我可以做类似i < arr.length - 2y < arr.length - 1x < arr.length的事情,这没有什么不同?


发布后,我意识到console.log在最后一个嵌套的for循环上,并且到达第一个嵌套循环的末尾,这就是为什么我看不到输出的原因。这意味着,第一个循环运行了多久并没有关系,因为x将会提前两位。

1 个答案:

答案 0 :(得分:1)

您以为# Create a form instance with POST data. >>> a = Author() >>> f = AuthorForm(request.POST, instance=a) <-- Set the instance model here # Create and save the new author instance. There's no need to do anything else. >>> new_author = f.save() i正在停止是不正确的...它们不是,它们将继续按照您的期望遍历每个值

这是因为当y变为5时,意味着i从6(5 + 1)开始,这意味着y从7(6 +1)开始。

由于7不是x< arr.length循环不会运行...因此您不会获得控制台输出。


如果您运行以下代码段,则将控制台日志放在x循环中...这样您就可以看到i确实遍历了所有值

i