在ES6中,有iterator.next(); 有没有办法提供iterator.previous()?

Mat*_*ood 6 javascript set ecmascript-6

浏览完整的ES6 兼容性表.刚刚开始Set().

const set = new Set();
set.add('foo');
set.add('baz');

const iterator = set.values();
iterator.next(); // { value: "foo", done: false }
iterator.next(); // { value: "baz", done: false }
Run Code Online (Sandbox Code Playgroud)

是否有可能编写一个类似的方法iterator.next(),但它向后迭代而不是向前(即iterator.previous())?

the*_*eye 2

返回values()一个迭代器对象,并且不可能向后迭代它们,因为 JavaScript 迭代器对象可能是无限的。例如,考虑这个

function * Counter() {
    "use strict";
    var i = 0;
    while (1) {
        yield i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用Counter()和 来创建一个永远不会结束的迭代器。因此,通常情况下,迭代器不能选择向后退。


如果您非常需要像 backIterator 这样的东西,那么您必须维护迭代器生成的值,然后根据调用来回移动next