entries()返回数组迭代器对象,用于按索引和元素成对遍历;需用for...of、array.from()或扩展运算符消费,键为数字索引,值为对应元素,区别于for...in和foreach,支持解构与流程控制。

JavaScript 中数组的 entries() 方法返回一个数组迭代器对象,可以按索引(键)和对应元素(值)成对遍历数组。
entries() 返回的是迭代器,不是数组
调用 arr.entries() 不会直接得到键值对数组,而是返回一个可迭代对象。需要用 for...of、扩展运算符或 Array.from() 等方式消费它:
-
for (const [index, value] of arr.entries()) { ... }—— 最常用,清晰直观 -
Array.from(arr.entries())—— 转为二维数组,如[[0, 'a'], [1, 'b']] -
[...arr.entries()]—— 同样转为二维数组,写法更简洁
键是索引,值是元素,顺序严格对应
数组是索引驱动的类数组结构,所以 entries() 的“键”就是数字索引(0, 1, 2…),不是字符串或其他类型:
const colors = ['red', 'green', 'blue'];
for (const [i, color] of colors.entries()) {
console.log(i, color); // 0 'red' → 1 'green' → 2 'blue'
}
entries() 和 for...in、forEach 的区别
避免混淆:
-
for...in遍历的是**可枚举属性名**(包括原型链上新增的属性),不保证顺序,也不只限于数字索引 -
forEach()只提供值和索引,但不能中途跳出(不支持break),也不返回新结构 -
entries()提供标准迭代协议,可与break、continue、生成器、解构等配合,更灵活可控
实用小技巧:结合解构和条件过滤
可以在遍历时直接解构,并用 if 或 continue 控制逻辑:
const nums = [10, 20, 30, 40];
for (const [idx, n] of nums.entries()) {
if (n > 25) {
console.log(`第 ${idx} 位是 ${n}`); // 第 2位是 30,第 3位是 40
}
}











