4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaScriptで[ 0, 1, 2, 3, 4 ]のような連番の配列を生成する僕のやり方

Last updated at Posted at 2019-07-21

はじめに

下の記事を見て、自分の気に入っている方法を紹介したいと思ったところです。
後述しますが、あまり差があるわけではないので、自分の好きな書き方をするのが一番ですね。

@suin様の「JavaScriptで[ 0, 1, 2, 3, 4 ]のような連番の配列を生成する方法」
https://qiita.com/suin/items/1b39ce57dd660f12f34b

ソース

Array(5).fill(0).map((_,i) => i) // => [0, 1, 2, 3, 4]

Array.prototype.fillがES2015だと思います。

解説

// Step 1
Array(5)
// => [undefined, undefined, undefined, undefined, undefined]

// Step 2
Array(5).fill(0)
// => [0, 0, 0, 0, 0]

// Step 3
Array(5).fill(0).map((_,i) => i) 
// => [0, 1, 2, 3, 4]

といった感じで連番の配列が生成されます。

比較

Chrome 75 (Windows, x64)の開発者ツールで比較してみました。

// fill-method
console.time('seq');
Array(10000000).fill(0).map((_,i)=>i);
console.timeEnd('seq');
// => seq: 268.4619140625ms

// spread-method
console.time('seq');
[...Array(10000000)].map((_,i)=>i);
console.timeEnd('seq');
// => seq: 303.242919921875ms

Node.js 10 (Windows, x64)では次のようになります。

// fill-method
console.time('seq');
Array(10000000).fill(0).map((_,i)=>i);
console.timeEnd('seq');
// => seq: 1638.617ms

// spread-method
console.time('seq');
[...Array(10000000)].map((_,i)=>i);
console.timeEnd('seq');
// => seq: 2144.508ms

0を詰めるfill操作が無駄に思えますが、どちらの環境でも少しだけspread構文使うより早いみたいです。
意外でした。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?