Skip to content

parzh/xrange

Folders and files

NameName
Last commit message
Last commit date
Aug 25, 2023
Sep 10, 2020
May 11, 2020
Sep 12, 2020
Jul 8, 2022
May 14, 2020
Jun 3, 2020
Jul 8, 2022
Jan 5, 2021
Jul 9, 2023
Jul 9, 2023
May 11, 2020
May 11, 2020
Apr 22, 2020
May 11, 2020
Jun 3, 2020
Apr 22, 2020
Oct 27, 2020

Repository files navigation

Test changes npm version npm size licence MIT

github npm

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

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)

Iteration with methods (see #14):

xrange(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 xrange uses @xrange/func under the hood.