使用for循环通过带有array.length的javascript数组向后循环

问题描述 投票:0回答:5

如果我有一个我想循环的数组= [8,7,6,5,4],为什么以下for循环仍然有效,但数组的长度是5,并且在索引5处没有元素阵列?

for(let i=array.length;i>=0;i++){
  //do something 
}

我知道从长度中减去1会更准确,但为什么上面的代码仍然有效

javascript arrays for-loop control-flow
5个回答
1
投票

几乎。你必须:

  • 减少i而不是增加它,并且
  • array.length-1开始,因为数组索引从0开始,而不是1。

所以改用:

for (let i = array.length-1; i >=0 ; i--) {

0
投票

它发生原因Javascirpt中的数组不限于它们声明的大小。因此,它暗示如果您尝试访问空位置,您将收到未定义的。例如,在这种情况下,如果你做array[5],你将收到undefined而不是像Java中那样的ArrayIndexOutOfBoundsException

另外,您应该查看代码。由于你向后迭代数组,你可以用i减去i--而不是递增它。


0
投票

因为它是这样的:

const array = [1,2,3,4];
for(let i=10;i>=0;i--){
  console.log(array[i]);
}

你可以随心所欲地骑自行车。在javascript中,一切都是对象,包括数组。使用[]访问对象中不存在的内容将返回undefined。


0
投票
for(let i=array.length-1;i>=0;i--){
  //do something 
}

你需要将i设置为数组-1的长度(因为数组索引从0开始)。然后每次你完成循环你需要从ii--)中减去一个

您的代码有效,但会在循环中运行很多次,直到数字溢出为负数。尝试将console.log(i)添加到循环中以查看我的意思。 (如果你在检查员中这样做,它可能会冻结铬)


0
投票

Array的长度等于假设它们都已满的条目数。稀疏数组的长度不是其中的元素数,而是基于它们中的最大索引

例如:

let a = [];
a[10] = 1;
console.log(a.length);
console.log(a);

长度为11(0到10),你可以看到undefined的值为0到9。

即使将最后一个值设置为undefined也不会影响长度,因为在该位置仍然存在undefined的值。

let a = [];
a[9] = 1;
a[10] = 1;
console.log(a.length);

a[10] = undefined
console.log(a.length);

使用删除仍然不会影响长度。

let a = [];
a[9] = 1;
a[10] = 1;
console.log(a.length);

delete a[10];
console.log(a.length);

更改长度的唯一方法是创建一个新数组作为原始子集:

let a = [];
a[9] = 1;
a[10] = 1;
console.log(a.length);
console.log(a);

a = a.slice(0,9);
console.log(a.length);
console.log(a);
© www.soinside.com 2019 - 2024. All rights reserved.