for...of 遍历 arr.entries() 可直接解构获取索引和值,如 [index, value],支持空槽、语义清晰且支持 break/continue。

直接用 for...of 遍历数组的 entries() 方法,每次迭代会得到一个包含 索引 和 对应元素 的二元数组,解构即可拿到当前索引位。
entries() 返回的是索引-值配对的迭代器
arr.entries() 不返回元素本身,而是返回一个迭代器,每次产出形如 [index, value] 的数组。这是获取索引最自然的方式之一,无需额外计数器或 indexOf。
- 它按顺序遍历,索引从
0开始,与数组实际位置严格一致 - 即使数组含空槽(如
[1, , 3]),entries()仍会为缺失项产出索引(如[1, undefined])
在 for...of 中解构获取索引和值
利用数组解构语法,一行就能同时取出索引和元素:
const arr = ['a', 'b', 'c'];
for (const [index, value] of arr.entries()) {
console.log(index, value); // 0 'a' → 1 'b' → 2 'c'
}
方括号 [index, value] 是解构赋值,等价于:
for (const pair of arr.entries()) {
const index = pair[0];
const value = pair[1];
}
只想要索引?可以忽略值
如果仅需索引位,用逗号占位符跳过值部分:
for (const [index,] of arr.entries()) {
console.log(index); // 0, 1, 2
}
注意逗号不能省略,否则会把整个 [index, value] 赋给 index 变量。
对比其他常见方式
相比 for (let i = 0; i 或 arr.forEach((v, i) => {...}),entries() + for...of 的优势在于:
- 语义清晰:明确表达“我要索引和值”
- 支持
break/continue控制流(forEach不支持) - 可与其他迭代器组合(如配合
filter()、map()等)










