xrange
is a function based on Python 3's range
class (or Python 2's xrange
class). Like the one in Python, xrange
creates virtual arrays (see Iterators) which allows getting values lazily. This prevents over-the-top memory consumption when using large numbers, and opens the possibility to create never-ending, infinite lists.
Created with create-package-typescript
Simple iteration:
for (const number of xrange(5))
console.log(number); // 0, 1, 2, 3, 4
[ ...xrange(5) ];
// [ 0, 1, 2, 3, 4 ]
xrange(0, Infinity);
// 0, 1, 2, 3, … (never ends)
xrange(10, 0, -1);
// 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
xrange(1, (next) => next < 100, ([ last, prelast = 0 ]) => last + prelast);
// 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
xrange(0, () => true, ([ last ]) => last ? 0 : 1);
// 0, 1, 0, 1, 0, 1, … (never ends)
Iteration with methods (see #14):
xrange(17, 42, 5).forEach(number => {
console.log(number); // 17, 22, 27, 32, 37
});
See more in /docs/examples
Looking for less functionality in a smaller bundle? Check out
@xrange/core
and@xrange/func
The main difference of xrange
from range
is that xrange
is an iterator, not an array constructor, — it yields numbers on demand, leaving array creation decision to user, which can always be done using the ...
spread operator or Array.from
.
While also having a larger bundle, xrange
delegates the actual iteration to @xrange/core
, which is vastly smaller, and can be used on its own (in some cases the usage is different though).
While @xrange/core
provides numeric iterator, @xrange/func
implements predicated iteration, provided as a separate smaller package. It also has less error correction, but the functionality is quite similar to xrange
, since xrange
uses @xrange/func
under the hood.