# Create array sequence `[0, 1, ..., N-1]` in one line

Here are two compact code sequences to generate the `N`

-element array `[0, 1, ..., N-1]`

:

### Solution 1 (requires ES5)

```
Array.apply(null, {length: N}).map(Function.call, Number);
```

#### Brief explanation

`Array.apply(null, {length: N})`

returns an`N`

-element array filled with`undefined`

(i.e.`A = [undefined, undefined, ...]`

).`A.map(Function.call, Number)`

returns an`N`

-element array, whose index`I`

gets the result of`Function.call.call(Number, undefined, I, A)`

`Function.call.call(Number, undefined, I, A)`

collapses into`Number(I)`

, which is naturally`I`

.- Result:
`[0, 1, ..., N-1]`

.

For a more thorough explanation, go here.

### Solution 2 (requires ES6)

It uses `Array.from`

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from

```
Array.from(new Array(N),(val,index)=>index);
```

### Solution 3 (requires ES6)

```
Array.from(Array(N).keys());
```

#### Brief explanation

`A = new Array(N)`

returns an array with`N`

*holes*(i.e.`A = [,,,...]`

, but`A[x] = undefined`

for`x`

in`0...N-1`

).`F = (val,index)=>index`

is simply`function F (val, index) { return index; }`

`Array.from(A, F)`

returns an`N`

-element array, whose index`I`

gets the results of`F(A[I], I)`

, which is simply`I`

.- Result:
`[0, 1, ..., N-1]`

.

### One More Thing

If you actually want the sequence [1, 2, …, N], **Solution 1** becomes:

```
Array.apply(null, {length: N}).map(function(value, index){
return index + 1;
});
```

and **Solution 2**:

```
Array.from(new Array(N),(val,index)=>index+1);
```

MEET THE NEW JSTIPS BOOK
Slay the JavaScript Interview.

You don’t need ten years of experience to land on your dream job. Use the 100 answers in this short book to build the confidence and skills to assess the JavaScript interview in your favorite startup or top tech company.

GET THE BOOK NOW