Need help with proposal-Number.range?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

tc39
336 Stars 6 Forks MIT License 67 Commits 10 Opened issues

Description

A proposal for ECMAScript to add a built-in Number.range()

Services available

!
?

Need anything else?

Contributors list

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

Polyfill

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.

——

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, ……

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)

Discussions

Discussions in Issue

Important semantics discussion
Others

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

Presentations

Signature

See global.d.ts

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.