“array.length -1”在JavaScript中是什么意思

What does "array.length -1" mean in JavaScript?

本文关键字:JavaScript 是什么 意思 array length      更新时间:2023-09-26

例如,我知道如何使用 JavaScript for 循环来循环数组,但我仍然不明白array.length -1是什么意思,特别是-1部分。

在数组上使用 for 循环时,我们有这样的东西:

for (i = 0; i < array.length; i++) {...}

但我有时也见过这样的事情:

for (i = 0; i < array.length - 1; i++) {...}

在第二种情况下,为什么 array.length 中有"-1",它有什么作用?还有为什么有时有,有时没有显示?

这是为了防止栅栏错误,又名"逐个关闭"。

常见考试题目:

您需要建造100米的围栏,每米有一个栅栏柱。您需要多少个栅栏?

明显的快速(和错误)答案:

    100 meters
  --------------- = 100 posts
     1 post
     ------
     meter

因为对于 100 米的围栏,您需要 101 个柱子:

Distance:    1 2  ....  99 100
            |-|-|.....| - | - |
Post:       1 2 3 ....99  100 101

现在有了数组,同样的事情也会发生。假设它是一个包含 5 个项目的数组:

for (i = 0 ; i <= 5; i++)
                  ^--length of array

你最终会做

        i:    0, 1, 2, 3, 4, 5
iteration:    1  2  3  4  5  6

哎呀,5 个项目数组,但你已经执行了 6 次循环 - 一次太多了。

您可以通过两种方式修复错误:

for (i = 0; i < length; i++)
              ^---change from "<=" to "<"

for (i = 0; i <= length - 1; i++)
                        ^---change the upper limit value.

例如,如果您的数组有 4 个元素

var elementOfArray = [7, 9, 0, 2]

你想达到这些元素。在这种情况下,您需要知道 elementOfArray[i] 表示数组的元素,i 是索引

因此,如果你在数组长度上加上'-1';你可以看到数组中的整个元素,如elementOfArray[0]---7elementOfArray[1]---9elementOfArray[2]---0elementOfArray[3]---2。看!您在元素中取了整数。

如果不减去数组长度的 1,则会出错。因为没有表示数组任何元素的elementOfArray[4]

Javascript 数组是从 0 开始的,这意味着如果你有一个包含 5 个项目的数组,你将使用索引 0 到 4 来访问它们。他们减去一个("-"和"1"之间应该有一个空格以使其更清晰)以找到最后一个索引。

已编辑:如果他们减去一个,则测试应为"<="。

如果一次访问多个索引,通常希望通过确保每个访问的索引都< array.length来避免溢出

所以如果你做这样的事情

array[x+2] = array[x] + array[x+1];

您通常希望确保[]中出现的最高值小于 array.length

那么上面的示例中的 for 可能看起来像

for(int x = 0; x+2 < array.length; x++) {
   array[x+2] = array[x] + array[x+1];
} 

这在数学上是等价的

for(int x = 0; x < array.length - 2; x++) {
   array[x+2] = array[x] + array[x+1];
}

这是我经过一些研究和实验后发现的。列表中的项目从 1 开始计数,这很明显,但索引从"0"开始计数。因此,假设您正在循环访问数组/列表,并声明整个数组的长度。例如:let 数组 = [1,2,3,4];for (i = 0; i <= array.length; i++){警报(一)}最后一个警报将显示"未定义",因为数组中没有索引为 4 的项目(尽管数组中的项目是)。因此,一个好的做法是"I <array.length"或"i><= array.length - 1"。如果我遗漏了什么,或者如果您需要更多澄清,请纠正我。