xrange
Python-esque iterator for number ranges
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
Examples
Simple iteration:
for (const number of xrange(5))
console.log(number); // 0, 1, 2, 3, 4
Creation of arrays:
[ ...xrange(5) ];
// [ 0, 1, 2, 3, 4 ]
Infinite and backward iteration:
xrange(0, Infinity);
// 0, 1, 2, 3, … (never ends)
xrange(10, 0, -1);
// 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
Complex number sequences:
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)
#14):
Iteration with methods (seexrange(17, 42, 5).forEach(number => {
console.log(number); // 17, 22, 27, 32, 37
});
See more in /docs/examples
range
vs xrange
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 it uses @xrange/func
under the hood.