laziness
v1.0.8
Published
Lazy evaluation utilities for JavaScript powered by ES6 iterators and generators
Downloads
9
Maintainers
Readme
laziness
Lazy evaluation utilities for JavaScript powered by ES6 iterators and generators.
Well-tested and with Flow type definitions included.
Compatible with Node v6.11.2 LTS or later.
Installation
npm install --save laziness
Usage example
const { default: Laziness, range } = require('laziness');
// logs numbers 0, 1, ..., 9 one per line
for (const x of range(0, 10)) {
console.log(x);
}
// the same
Laziness.from(range(0, 10))
.forEach(x => console.log(x));
function* fib() {
yield 1;
yield 1;
const [fib1, fib2] = Laziness.from(fib()).tee();
yield* fib1.map2((x, y) => x + y, fib2.tail());
}
fib() // 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
API
Table of Contents
INFINITE ITERATORS
Infinite Iterators
cycle
Generates all elements of the iterable. Once the original iterable is exhausted, yields all elements again. Repeats indefinitely.
Parameters
iter
Iterable<T>
Examples
cycle('ABC') // 'A', 'B', 'C', 'A', 'B', 'C', ...
Returns Generator<T, void, void>
range
Parameters
Examples
range(0, Infinity) // 0, 1, 2, ...
Returns Generator<number, void, void>
repeat
Repeats value endlessly or up to limit times.
Parameters
value
Tlimit
number (optional, defaultInfinity
)
Examples
repeat(5) // 5, 5, 5, 5, ...
repeat(10, 3) // 10, 10, 10
Returns Generator<T, void, void>
UTILITIES
Basic functions
filter
Analogical to Array.prototype.filter
Parameters
iter
Iterable<T>callback
function (T): boolean
Returns Generator<T, void, void>
forEach
Analogical to Array.prototype.forEach
Parameters
iter
Iterable<T>callback
function (T): void
Returns void
map
Analogical to Array.prototype.map
Parameters
iter
Iterable<T>callback
function (T): U
Returns Generator<U, void, void>
map2
Generates values of the function when applied arguments from each of the iterables. Stops when the shortest iterable is exhausted.
Parameters
callback
function (U, V): Titer1
Iterable<U>iter2
Iterable<V>
Examples
map2((x, y) => x + y, range(1, 4), range(10, 40, 10)) // 11, 22, 33
Returns Generator<T, void, void>
slice
Analogical to Array.prototype.slice
Parameters
Returns Generator<T, void, void>
tail
Skips first element of iterable
Parameters
iter
Iterable<T>
Returns Generator<T, void, void>
tee
Clone interable into n independent instances
Parameters
iter
Iterable<T>n
number (optional, default2
)
Returns Array<Generator<T, void, void>>
LAZINESS WRAPPER
Handy wrapper for common operations on iterables.
Laziness
Convenient wrapper for chaining calls to library functions.
You can also use it as iterable.
Parameters
iter
Iterable<T>
Examples
Array.from(new Laziness([1, 2, 3])) // 1, 2, 3
function* fib() {
yield 1;
yield 1;
const [fib1, fib2] = Laziness.from(fib()).tee();
yield* fib1.map2((x, y) => x + y, fib2.tail());
}
fib() // 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
filter
See filter
Parameters
callback
function (T): boolean
Returns Laziness<T>
forEach
See forEach
Parameters
callback
function (T): void
map
See map
Parameters
callback
function (T): U
Returns Laziness<U>
map2
See map2
Parameters
callback
function (T): Uiter2
Iterable<V>
Returns Laziness<U>
slice
See slice
Parameters
Returns Laziness<T>
tail
See tail
Returns Laziness<T>
tee
See tee
Parameters
n
number (optional, default2
)
toArray
Returns Array<T>
from
Same as new Laziness(iter)
Parameters
iter
Iterable<T>
Returns Laziness<T>