Iterator不能直接转为数组,需遍历并收集值:推荐Array.from(iterator)或展开运算符[...iterator],手动push兼容性最强,避免slice.call等错误方法。

Iterator 本身不能直接“转换为数组类型”,但可以通过多种方式将其内容提取为真正的 Array 实例。关键在于:Iterator 是一个协议(具备 next() 方法的对象),它描述的是“如何按需获取值”,而不是数据容器本身;而数组是具体的数据结构。所以所谓“转换”,本质是**遍历 Iterator 并收集所有值到新数组中**。
用 Array.from() 最简洁可靠
这是最推荐的方式,适用于任何可迭代对象(包括 Iterator、Set、Map、字符串、类数组等):
-
Array.from(iterator)会自动调用 iterator 的next()方法,直到返回{ done: true },把每个value推入新数组 - 支持第二个参数作为映射函数,类似
map:Array.from(iterator, x => x * 2) - 对已耗尽的 Iterator 返回空数组,不会报错
用展开运算符 [...iterator]
语法最短,语义清晰,但有前提:
- 要求该 Iterator 必须来自一个可迭代(iterable)对象(如
Array.prototype.values()、Map.prototype.values()、generator函数返回值等) - 如果手写了一个只实现
next()但没部署[Symbol.iterator]的对象,[...it]会报TypeError: it is not iterable - 内部机制和
Array.from类似,也是逐次调用next()
手动循环 + push()(兼容性最强)
适合需要精细控制、或运行在极老环境(如 IE)中:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 创建空数组
const arr = [] - 循环调用
iterator.next(),检查done字段,未完成则arr.push(result.value) - 注意:Iterator 只能消费一次,多次调用
next()会继续往后走,不可重置
不推荐:用 Array.prototype.slice.call() 或 Array.apply()
这些方法依赖类数组对象(有 length 和数字键),而普通 Iterator 不满足这个结构,会得到空数组或报错,应避免使用。
只要 Iterator 没被提前耗尽,以上任一方法都能得到一个标准的、具备所有数组方法(map、filter、find 等)的数组实例。核心记住:Iterator 是“过程”,数组是“结果”;转换就是执行这个过程并存下每一步的产出。

















