# 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);
```