イナヅマTVログ

[JavaScript] n個の配列を作りたい、できれば0でうめて

| 3件のコメント

JavaScript で0で埋まったn個の配列を作りたい時にどうするかの話です。

n個の配列は次のコードで作成可能です。

var n_length_array = new Array( n );

あるいは

var n_length_array = [];
n_length_array.length = n;

要素がundefinedな配列は作成可能です。

元ネタは stackoverflow の古い質問です。
Most efficient way to create a zero filled JavaScript array?

いくつかのコードが紹介されています。

Array.apply(null, new Array(5)).map(Number.prototype.valueOf,0);
// [0, 0, 0, 0, 0]
 
Array.apply(null, new Array(3)).map(String.prototype.valueOf,"hi")
// ["hi", "hi", "hi"]
 
new Array(5+1).join('0').split('')
// ["0", "0", "0", "0", "0"]
 
new Array(5+1).join('0').split('').map(parseFloat)
// [0, 0, 0, 0, 0]

Array.apply 使うんや〜
join, split のこんな使い方あるんか〜
と感心してたら、「いやいや、それ遅いし」と指摘してる方がいらっしゃいました。
テストコードを見ることができます。
http://jsperf.com/zerofill-2d-array

for ループさせた方が早いらしいです。

1回だけの生成だと、そんなに目くじら立てなくても、とも思います。
大量に生成を繰り返す時には注意しなくてはと心に刻みました。

3件のコメント

  1. 0で埋めたい場合はTypedArray一択です

  2. 対応しているブラウザではその通りだと思います

  3. 型付き配列が使えないブラウザと言ったらIE9くらいでは?
    型付き配列が使えなければBlobも使えないし、つまりHTML5の様々なAPI、なんとXHR2すらもまともに対応していないということで、そのようなブラウザはJSをOFFにしていると人と同じグループに入れて考えた方が合理的で楽かと思います。

コメントを残す

必須欄は * がついています