使用for循环向后遍历具有array.length的javascript数组

时间:2019-04-04 15:44:21

标签: javascript arrays for-loop control-flow

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

@AllArgsConstructor
@NoArgsConstructor
@Entity
@Getter
@Setter
@Inheritance(strategy = InheritanceType.JOINED)
//@EqualsAndHashCode(callSuper = true)
@DiscriminatorColumn(name = "person_type")
@Table(name = "persons",
        uniqueConstraints = {
                @UniqueConstraint(columnNames = {"number, person_type ,company_id"})
        },

        indexes = {
                @Index(name = "person_firstname_index", columnList = "firstname"),
                @Index(name = "person_lastname_index", columnList = "lastname"),
                @Index(name = "person_first_lastname_index", columnList = "firstname,lastname"),
                @Index(name = "person_email_index", columnList = "email"),
                @Index(name = "person_number_index", columnList = "number, company_id"),
                @Index(name = "person_mobile_index", columnList = "mobile"),
                @Index(name = "person_email_mobile_number_index", columnList = "number,email,mobile"),
        })
public abstract class Person extends BaseEntity implements ActorProfile {}

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

5 个答案:

答案 0 :(得分:1)

差不多。您必须:

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

请改用:

array.length-1

答案 1 :(得分:0)

发生这种情况是因为Javascirpt中的数组不限于声明的大小。因此,这意味着如果您尝试进入一个空位,您将收到未定义的信息。例如,在这种情况下,如果您执行array[5],则会收到undefined,而不是Java中的ArrayIndexOutOfBoundsException

此外,您还应该看一下代码。由于要向后迭代数组,因此应将i递减i--而不是递增。

答案 2 :(得分:0)

因为它是这样的:

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

您可以循环所需的任何内容。在javascript中,一切都是对象,包括数组。使用[]访问对象中不存在的内容将返回undefined。

答案 3 :(得分:0)

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

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

您的代码可以工作,但是会循环运行很多次,直到数字溢出为负数为止。尝试将console.log(i)添加到循环中,以了解我的意思。 (如果在检查器中进行操作,铬可能会冻结)

答案 4 :(得分:0)

Array的长度等于所有条目已满的条目数。稀疏数组没有元素数量的长度,而是基于它们中的最大索引

例如:

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

长度为11(0到10),您可以看到索引0到9的值为undefined

即使将最后一个值设置为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);