1.0.3 • Published 9 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 lazinessYou 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
fnto every entry - filter(fn) - return new iterator that apply
fnto every entry and exlude the entry iffnreturnfalse - takewhile(fn) - return new iterator that apply
fnto every entry untilfnreturnfalseand exclude enries for whichfnreturnfalseand rest of enries for whichfnwas not applied - take(n) - return new iterator that has only first
nentries
Eager:
- forEach(fn) - go through enries and apply
fnto each entry - find(fn) - go throuh entries and apply
fnfor each entry untilfnreturntrue, return the entry for whichfnreturntrue - reduce(acc, fn) - reduce enries with
fn - collect() - convert iterator into array