JavaScript array range (Array.from, start/stop/step, loop)

Numeric ranges with Array.from, start/stop/step helpers, loops, and keys(). Snippets include short expected-output notes from Node runs.

Published

Updated

Read time 5 min read

Reviewed byDeepak Prasad

JavaScript array range (Array.from, start/stop/step, loop)

There is no single built-in range() in JavaScript like in some other languages, but you can build javascript array range values in a few lines. This guide covers how to create an array with values within range javascript using Array.from, a reusable start/stop/step helper (exclusive stop, like Python’s range), a classic for loop, and Array.prototype.keys() tricks for js range array and array range js searches. The Array.from factory is the same building block highlighted in the JavaScript classes tutorial; copying generated rows without aliasing nested objects may call for clone object patterns.

Tested on: Node.js v20.18.2. A short note after each runnable snippet describes what you should see in the console.


Quick reference

Exclusive stop is the usual convention for range(start, stop, step) helpers; [...Array(n).keys()] is the shortest 0…n-1 pattern.

Goal Pattern
0 … n-1 [...Array(n).keys()]
1 … n Array.from({ length: n }, (_, i) => i + 1)
Arbitrary start, stop, step range helper with Math.ceil((stop - start) / step)

Array.from — JavaScript range 1n

For “how to create an array with values within range javascript” when the range is a simple arithmetic sequence starting at 1, Array.from with a length object and a mapper is the clearest javascript array range pattern: one line, no manual indexing, and easy to read for anyone used to map on a normal js range array.

javascript
const numbers = Array.from({ length: 10 }, (_, i) => i + 1);
console.log(numbers);
Output

You should see one line: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ].

The second argument is a mapping function applied while the array is created (MDN: Array.from); it is not Array.prototype.map on a pre-filled array.


new Array + for — JavaScript range array (explicit)

If you need a javascript range array without Array.from (very old engines, strict lint rules, or teaching the mechanics), pre-allocate with new Array(length) and fill indexes in a for loop. It is more verbose than a one-liner js range array, but the intent—“create array of numbers in range javascript” by assignment—is obvious in code review.

javascript
const numbers = new Array(10);
for (let i = 0; i < numbers.length; i++) {
  numbers[i] = i + 1;
}
console.log(numbers);
Output

You should see one line: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ].


Reusable range(start, stop, step) — JS array range

When the same array range javascript logic appears in several places, extract a range(start, stop, step) helper. It answers “javascript create array of numbers in range” for any stride: the length comes from Math.ceil((stop - start) / step), matching the usual MDN-style sequence generator so your javascript range stays predictable for teammates and for FAQ-style questions about inclusive vs exclusive ends.

javascript
const range = (start, stop, step = 1) =>
  Array.from(
    { length: Math.max(0, Math.ceil((stop - start) / step)) },
    (_, i) => start + i * step
  );
console.log(range(2, 24, 1));
Output

You should see one line: integers 2 through 23 (stop exclusive).

Here stop is exclusive: range(2, 24, 1) yields 2 through 23. Same pattern as MDN’s “sequence generator” example.


Exclusive stop and step > 1

These examples stress two things people look up under js array range and javascript range: stop is exclusive (the last value is stop - step for a positive step), and step greater than 1 skips entries—handy for odd numbers, grid coordinates, or sampling. If you need an inclusive upper bound, adjust stop (for example L + step) so the javascript array range still ends exactly at L.

javascript
const range = (start, stop, step = 1) =>
  Array.from(
    { length: Math.max(0, Math.ceil((stop - start) / step)) },
    (_, i) => start + i * step
  );
console.log(range(0, 5, 1));
console.log(range(1, 10, 2));
Output

You should see two lines: [ 0, 1, 2, 3, 4 ], then [ 1, 3, 5, 7, 9 ].


keys() shorthand — range in JavaScript from 0

For 0n-1, [...Array(n).keys()] is a compact range in javascript idiom: iterator keys() over sparse slots, then spread into a real array range js. When you need 1n instead, either offset in map or stick with Array.from above—both beat hand-rolled loops for short javascript range snippets in demos and tests.

javascript
console.log([...Array(5).keys()]);
console.log([...Array(5)].map((_, i) => i + 1));
Output

You should see two lines: [ 0, 1, 2, 3, 4 ], then [ 1, 2, 3, 4, 5 ].

[...Array(n)] materializes n slots so map runs for each index (MDN: Array() constructor).


Summary

Array.from is the workhorse for 1…n and custom range(start, stop, step); keys() is shortest for 0…n-1.

  • Array.from({ length }, mapFn) — best default for a javascript range array of mapped values (e.g. 1n).
  • new Array + for — explicit js range array fill when you want zero abstraction or maximum compatibility.
  • range(start, stop, step) — reusable javascript array range with exclusive stop; use Math.ceil on the length for fractional steps in other variants.
  • [...Array(n).keys()] — minimal range in javascript for 0n-1; combine with map for offsets.
  • Prefer Array.from over [...Array(n)].map(...) when you only need a generated javascript range (fewer intermediate arrays).

References

Deep dives on Array.from, sparse Array(length) behavior, and keys()—the primitives behind most javascript create array of numbers in range snippets in modern codebases.


Frequently Asked Questions

1. javascript array range inclusive or exclusive end?

The common Array.from range helper treats stop like Python range—exclusive. Values run from start up to but not including stop when step divides the interval evenly. For an inclusive last value L, pass stop = L + step (for positive step).

2. array range javascript with a negative step?

Flip the formula or build descending values with start + i * step where step is negative; ensure length uses abs((stop - start) / step) and stop is less than start when stepping down.

3. js array range without Array.from for old environments?

Use a for loop pushing into an array, or new Array(length) then assign indexes—works everywhere Array exists.

4. javascript range array why use Math.ceil on length?

It counts how many steps fit between start and stop for a given step, matching the MDN sequence-generator pattern so the last generated value stays below stop for positive step.

5. range in javascript vs spread Array keys?

[...Array(n).keys()] yields 0..n-1. Add an offset or map if you need 1..n or arbitrary starts.

6. Is Array.from second argument the same as map?

It is a mapFn applied while building the array; unlike map on an existing array, it does not create an intermediate dense array from the array-like source first (see MDN).
Olorunfemi Akinlua

Boasting over five years of experience in JavaScript, specializing in technical content writing and UX design. With a keen focus on programming languages, he crafts compelling content and designs …