Ignatius Andrew
Ignatius Andrew

Reputation: 8258

ES6 Set - How to iterate to previous value?

In ES6's Set next Property is available like

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

var setIter = mySet.entries();

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

How to navigate to the previous property, Is something like below is available?

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

Upvotes: 0

Views: 249

Answers (1)

CodingIntrigue
CodingIntrigue

Reputation: 78535

Iterators do not have a previous function. You can however iterate using for..of instead and keep track of the previous value:

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;
}

Then you can wrap in a function which returns a generator like so:

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);
}

Upvotes: 1

Related Questions