我知道如何使用JavaScript for循环来循环遍历数组,但我仍然不了解array.length -1
的含义,特别是-1
部分。
在数组上使用for循环时,我们有类似的东西:
for (i = 0; i < array.length; i++) {...}
但我也看到过这样的事情,有时候:
for (i = 0; i < array.length - 1; i++) {...}
在第二种情况下,为什么会出现&#34; -1&#34;在array.length中它做了什么?还有为什么有时会出现,有时候还没有显示出来?
答案 0 :(得分:7)
这是为了防止fencepost错误,又名“off-by-one”。
普通考试问题:
你需要建造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.
答案 1 :(得分:1)
Javascript数组从0开始,这意味着如果您有5个项目的数组,则可以使用索引0到4来访问它们。他们减去一个(' - '和'1'之间应该有一个空格以便更清楚)找到最后一个索引。
编辑:如果他们减去一个,测试应该是'&lt; ='。
答案 2 :(得分:1)
如果你的数组有 4 个元素,例如
var elementOfArray = [7, 9, 0, 2]
并且您想要触及这些元素。在这种情况下,您需要知道 elementOfArray[i]
表示数组的元素,i 是索引。
因此,如果您在数组长度上添加“-1”;您可以看到数组中的整个元素,例如 elementOfArray[0]---7
、elementOfArray[1]---9
、elementOfArray[2]---0
、elementOfArray[3]---2
。看!你在元素中取了整数。
如果数组长度不减1,就会报错。因为没有 elementOfArray[4]
代表数组的任何元素。
答案 3 :(得分:0)
如果一次访问多个索引,通常要确保每个访问的索引都是< 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];
}