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)
-
A polyfill is available in the core-js library. You can find it in the ECMAScript proposals section.
-
In the proposal repo is available a a step-to-step implementation of the proposal so you can verify if there is a bug in the specification by the debugger.
- 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.
—— String.prototype.{padStart,padEnd}
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, ……
- 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, ...)
- New Syntax
- String Sequence (a, b, c, d, ...)
- Magic
-
- E.g.
if (x in Number.range(0, 10))
(Kotlin have this feature)
- E.g.
- #13: Integration with Slice notation proposal
- #18: Alias Number.range(end) for Number.range(0, end)
- #19: API design (move to NumberRangeIterator, BigIntRangeIterator or Iterator.range)
- #25: Possible options
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