iterables = {
const getIterator = (length) => {
let state = 0
return {
next: () => state <= length ? { done: false, value: state++ } : { done: true }
}
}
const getGenerator = function* (length) {
let state = 0
while (state <= length) {
yield state++
}
}
const getIterable = (length) => ({
state: 0,
[Symbol.iterator]: function* () {
while (this.state <= length) {
yield this.state++
}
}
})
return {
getIterator,
getGenerator,
getArray: (length) => (new Array(length)).fill(1).map((value, index) => value + index),
getIterable
}
}