如果我要遍历一个数组= [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会更准确,但是为什么上面的代码仍然有效
答案 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开始)。然后,每次循环时,您需要从i
(i--
)中减去一个
您的代码可以工作,但是会循环运行很多次,直到数字溢出为负数为止。尝试将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);