ES6集 - 如何迭代到以前的值?

时间:2016-04-28 07:13:52

标签: ecmascript-6

在ES6的设置下一个属性可用,如

var mySet = new Set();
mySet.add("foobar");
mySet.add(1);
mySet.add("baz");

var setIter = mySet.entries();

console.log(setIter.next().value); // ["foobar", "foobar"]

如何导航到上一个属性,下面是否可以使用?

console.log(setIter.previous().value);

1 个答案:

答案 0 :(得分:1)

迭代器没有以前的功能。但是,您可以使用for..of进行迭代,并跟踪之前的值:

var mySet = new Set();
mySet.add("foobar");
mySet.add(1);
mySet.add("baz");

let previous;
for(const current of mySet.entries()) {
  console.log(previous, current);
  previous = current;
}

然后你可以包装一个返回生成器的函数:

var mySet = new Set();
mySet.add("foobar");
mySet.add(1);
mySet.add("baz");

const previousNextIterator = theSet => {
  return {
    previous: undefined,
    *[Symbol.iterator]() {
      for(const e of theSet.entries()) {
        yield e;
        this.previous = e;
      }
    }
  };
};

const iter = previousNextIterator(mySet);
for(const current of iter) {
  console.log(current, iter.previous);
}