Iterator unique S1
中文标题:迭代器唯一值
提案概览
- 阶段: Stage 1
- 状态: 进行中
- ECMAScript 版本: —
- 同步时间: 2026年8月26日
- English original · 官方仓库
提案速览
该提案旨在为 Iterator.prototype 添加一个方法,从任何迭代器生成唯一值,解决现有工具对迭代器去重的困难。所选方案是 uniqBy,它接受一个可选的映射器作为唯一性标准。
Note
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
迭代器唯一值
这是一个 TC39 提案,旨在从任何迭代器生成唯一值的迭代器。
阶段: 1
参见 2024年1月向委员会做的演示。
动机
从任何类型的集合中去除重复项是一种常见操作。对于迭代器来说,这并不容易实现。
对于某些可迭代对象,你可以这样做:
但这有一些缺点:
- 在产生任何结果之前会消耗整个迭代器。
- 不适用于无限迭代器。
- 当底层迭代器产生 -0 时,会产出 0。
- 不能同时产出 0 和 -0。
- 不适用于不可迭代的迭代器。
更好的解决方案编写起来要困难得多,并且不能很好地与链式操作配合,因为它需要一组用于状态的附加变量。
更糟糕的是,当你希望根据某种应用的变换来去重时,你需要用成对的 map 和拆对的 map 包围 filter。
所选方案
Iterator.prototype.uniqBy,它接受一个可选的映射器。
设计空间
- 对于复合键仍然没有好的解决方案,但这是一个普遍未解决的问题
- 映射器?比较器?两者都要?还是都不要?
- 是分开的方法还是带有可选参数的组合?
- 映射器是否会被传入索引?
- 命名:
distinct也很常见