1.0.3 • Published 8 years ago
lazyiter v1.0.3
Lazy iterator
Creates iterator that iterate over collection lazily
Example:
const iter = require('lazyiter');
function fib(n) {
return n < 2 ? n : fib(n-2) + fib(n-1);
}
var list = iter([11, 22, 133, 144, 155]);
list.map(fib).take(2).collect() // [ 89, 17711 ]
// and no big CPU consumption, because of laziness
You can pass iterators between functions and add new layers in any moment,
and no computation happens until you apply eager
method
function foo(arr) {
// no computation here
return lazyiter(arr).map(e => e.toUpperCase())
}
var a = foo(["Oleg", "Jeka", "Dimon", "Demian", "Artem", "Escobar"]);
// add new layers
a.take(3).filter(e => e.length < 6)
// compute either with `collect`
a.collect() // [ 'OLEG', 'JEKA', 'DIMON' ]
// or by hand (note: iterator can be traversed only once)
a.next(); // { value: 'OLEG', done: false }
a.next(); // { value: 'JEKA', done: false }
a.next(); // { value: 'DIMON', done: false }
a.next(); // { value: undefined, done: true }
Methods
Lazy:
- map(fn) - return new iterator that apply
fn
to every entry - filter(fn) - return new iterator that apply
fn
to every entry and exlude the entry iffn
returnfalse
- takewhile(fn) - return new iterator that apply
fn
to every entry untilfn
returnfalse
and exclude enries for whichfn
returnfalse
and rest of enries for whichfn
was not applied - take(n) - return new iterator that has only first
n
entries
Eager:
- forEach(fn) - go through enries and apply
fn
to each entry - find(fn) - go throuh entries and apply
fn
for each entry untilfn
returntrue
, return the entry for whichfn
returntrue
- reduce(acc, fn) - reduce enries with
fn
- collect() - convert iterator into array