javascript数组的entries()方法返回一个标准iterator对象,支持for...of、展开运算符、解构及next()消费,每次next()返回{value: [index, element], done: false},惰性求值且不可重用。

JavaScript 中数组的 entries() 方法会返回一个迭代器(Iterator),它本身就是一个符合 Iterator 协议的对象,因此可以直接用 for...of、展开运算符、解构等 Iterator 常见方式消费,无需额外“配合”——entries() 本身就是 Iterator 的典型应用。
entries() 返回的是标准 Iterator
arr.entries() 返回的是一个 可遍历的迭代器对象,每次调用 .next() 会返回形如 { value: [index, element], done: false } 的对象。它天然支持所有 Iterator 消费方式:
- 用
for...of遍历:直接获取[index, element]数组 - 用展开运算符:
[...arr.entries()]得到索引-值对的数组 - 手动调用
.next():适合需要精细控制的场景
常见用法示例
假设有一个数组 const arr = ['a', 'b', 'c'];:
1. for...of 遍历(最常用)for (const [i, v] of arr.entries()) { console.log(i, v); }
输出:0 'a'、1 'b'、2 'c'
2. 转为数组并处理
const entriesArray = [...arr.entries()]; // [[0,'a'], [1,'b'], [2,'c']]<br>
entriesArray.map(([i, v]) => `${i}:${v}`); // ['0:a', '1:b', '2:c']
3. 手动迭代(理解底层)
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
const iter = arr.entries();<br>
console.log(iter.next()); // { value: [0, 'a'], done: false }<br>
console.log(iter.next()); // { value: [1, 'b'], done: false }
和其它迭代方法的区别
entries() 和 keys()、values() 一样,都返回原生 Iterator,但三者产出内容不同:
-
arr.keys()→ 迭代器,产出0, 1, 2, ...(索引) -
arr.values()→ 迭代器,产出'a', 'b', 'c'(元素) -
arr.entries()→ 迭代器,产出[0,'a'], [1,'b'], [2,'c'](索引+值)
它们都共享同一套 Iterator 接口,行为一致,只是 value 结构不同。
注意点
entries() 返回的迭代器是惰性求值且不可重用的:
- 不会立刻遍历整个数组,只在每次
.next()时计算下一个项 - 一旦遍历结束(
done: true),再次调用.next()总是返回{ value: undefined, done: true } - 不能多次遍历同一个迭代器实例;需要重新调用
arr.entries()获取新迭代器
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










