# Number.range & BigInt.range

Champions: Jack Works

Author: Jack Works

Stage: 1

This proposal describes adding a Number.range and a BigInt.range to JavaScript.

See the rendered spec at here.

Compare with other languages (Work in progress)

Playground

## Motivation

• because we don't have it yet™

Without these functions, the language feels incomplete, and is a paper cut to what could be a very polished experience. Bringing this into the platform will improve performance of the web, and developer productivity as they no longer have to implement these common functions.

range is a very useful function. For example in Python:

for i in range(5):
# ...

At least 20 different implementations in a single stackoverflow question.

Tons of libraries providing a range: math.js, lodash, underscore.js, ramda, d3, range, fill-range, multi-integer-range, ……

### Goals

• Arithmetic Sequence
• Incremental (0, 1, 2, 3, ...)
• Decremental (0, -1, -2, -3, ...)
• Step (0, 2, 4, 6, ...)
• Decimal step (0, 0.2, 0.4, ...)
• BigInt Support
• Same as Arithmetic Sequence
• Infinite Sequence Number.range(0, Infinity) -> (0, 1, 2, 3, ...)

### Non-goals

• New Syntax
• String Sequence (a, b, c, d, ...)
• Magic
• E.g. if (x in Number.range(0, 10)) (Kotlin have this feature)

# Examples

See tests to learn about more usages.

for (const i of BigInt.range(0n, 43n)) console.log(i) // 0n to 42n

// With iterator helper proposal
Number.range(0, Infinity)
.take(1000)
.filter((x) => !(x % 3))
.toArray()

function* even() {
for (const i of Number.range(0, Infinity)) if (i % 2 === 0) yield i
}
;[...Number.range(1, 100, 2)] // odd number from 1 to 99

See global.d.ts