entries() 是 JavaScript 数组方法,返回键为数字索引、值为对应元素的 Array Iterator;需用 for...of、Array.from() 或展开运算符消费,支持空位遍历且不跳过。

entries() 是 JavaScript 数组的原生方法,返回一个包含数组索引(键)和对应元素(值)的迭代器,每个元素是 [index, element] 形式的数组。
entries() 返回的是可迭代对象,不是数组
调用 arr.entries() 不会直接得到数组,而是返回一个 Array Iterator 对象,需配合 for...of、Array.from() 或展开运算符使用:
- 用
for...of遍历最直观:
const arr = ['a', 'b', 'c'];<br>for (const [i, val] of arr.entries()) {<br> console.log(i, val); // 0 'a', 1 'b', 2 'c'<br>} - 转成数组看全部内容:
Array.from(arr.entries()); // [[0, 'a'], [1, 'b'], [2, 'c']] - 展开运算符也行:
[...arr.entries()]; // 同上
entries() 的键始终是数字索引,不是“键名”
数组是索引集合,entries 的“键”就是下标(0, 1, 2…),不是对象属性名。它和 Object.entries() 有本质区别:
– arr.entries():键一定是递增数字,顺序严格对应位置;
– Object.entries():键来自对象自有可枚举属性,顺序按规范定义(字符串键先于 Symbol,插入顺序保留)。
常用于需要同时访问索引和值的场景
比起 forEach((val, i) => {...}) 或 map((val, i) => {...}),entries 更适合需要显式解构或中途控制迭代的情况:
- 找第一个满足条件的索引和值:
for (const [i, val] of arr.entries()) {<br> if (val > 10) return { index: i, value: val };<br>} - 构造带序号的对象列表:
arr.entries().map(([i, v]) => ({ id: i + 1, name: v })) - 配合
filter+map做带索引的筛选:Array.from(arr.entries()).filter(([i]) => i % 2 === 0).map(([i, v]) => v)
注意空位(sparse array)的行为
如果数组含空位(如 [1, , 3]),entries 仍会为每个索引生成条目,但值为 undefined,且该位置在迭代中**不会跳过**:
const a = [1, , 3];<br>console.log([...a.entries()]); // [[0, 1], [1, undefined], [2, 3]]
这和
for...in(只遍历存在的索引)或 map(跳过空位但传入 undefined)行为不同,需留意。


















