I want to restart iteration after the iterator reaches to done state.
Just look at the example:
const newMap = new Map<string, string>([
['key1', 'value1'],
['key2', 'value2']
]);
const iterator = newMap.values() // It can be newMap.entries()
iterator.next().value // prints value1
iterator.next().value //prints value2
iterator.next().value //prints undefined
I just want something like:
iterator.restart();
iterator.next().value // prints value1
>Solution :
You could craft your own iterator that, when asked to, calls newMap.values() again:
const newMap = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
const myIterator = (() => {
let currentIterator = newMap.values();
return {
next() {
return currentIterator.next();
},
restart() {
currentIterator = newMap.values();
}
}
})()
console.log(myIterator.next().value) // prints value1
console.log(myIterator.next().value) //prints value2
console.log(myIterator.next().value) //prints undefined
myIterator.restart();
console.log(myIterator.next().value) // prints value1