functor-iterable
exports a class that builds iterables that provide map method.
$ npm install functor-iterable --save
const FunctorIterable = require('functor-iterable')
const iterable = new FunctorIterable([4, 2, 7, 8]) // (4 2 7 8)
.map(e => 3 * e) // (12 6 21 24)
.map(e => e / 2) // (6 3 10.5 12)
// converting to array:
[...iterable] // [6, 3, 10.5, 12]
// traversing values:
for (const val of iterable) {
// ...
}
// creating an iterator that traverses the values
let iterator = iterable[Symbol.iterator]()
iterator.next() // {value: 6, done: false}
iterator.next() // {value: 3, done: false}
iterator.next() // {value: 10.5, done: false}
iterator.next() // {value: 12, done: false}
iterator.next() // {value: undefined, done: true}
// Infinite iterable
const naturals = {
[Symbol.iterator]: function* () {
let i = 1
while(true) { yield i++ }
}
} // (1 2 3 4...)
const collatzTransform = e => e % 2 === 1 ? 3 * e + 1 : e / 2
new FunctorIterable(naturals) // (1 2 3 4 5...)
.map(collatzTransform) // (4 1 10 2 16...)
.map(collatzTransform) // (2 4 5 1 8...)
.map(collatzTransform) // (1 2 16 4 4...)
.map(collatzTransform) // (4 1 8 2 2...)
.map(collatzTransform) // (2 4 4 1 1...)
- Node.js >=6
- ES2015 transpilers
MIT