2015/04/26

【JavaScript】配列をゼロで初期化する方法

配列を宣言するとき、オブジェクトリテラル(var arr = [];)とかArrayクラスで初期化(var arr = new Array();)などの方法がある。
(一般的にオブジェクトリテラルを使うのが推奨されてるが)

そして、初期化直後の配列は何も入っていない空の状態で生成される。

コーディングする上で、どうしてもすべての要素をゼロで初期化したかったのだが、なんだかうまくいかない。
ということで、配列をゼロで初期化する方法を調べてみた。


配列をゼロで初期化する方法


Array.prototype.map() を使う方法


配列の中身に何か(nullでもundefinedでもOK)が入っている場合は、以下のとおり。
var arr1 = [null, null, null];
arr1 = arr1.map(function () {return 0 });
console.log('arr1:' + arr1);  // -> arr1:[0, 0, 0]

var arr2 = [undefined, undefined, undefined];
arr2 = arr2.map(function () {return 0 });
console.log('arr2:' + arr2);  // -> arr2:[0, 0, 0]


しかし、このままだと最初から値が入っていないとゼロで初期化することができない。
動的に配列の要素数を変えたいときに、罠がある!
var arr3 = new Array(3).map(function () {return 0 });
console.log('arr3:' + arr3.length);   // -> arr3:3
console.log('arr3:' + arr3);          // -> arr3:[,,]

new Arrayで初期化すると、空の配列になってしまうため、map処理がスキップされてしまう。
そのため、Array.prototype.map()を使っても、ゼロで初期化することができない。

動的な配列をゼロで初期化したい場合は、次の方法がある。


apply() を使う方法


動的に配列の要素数を変え、かつゼロで初期化したい場合は、applyを使う。
var arr4 = Array.apply(null, Array(3)).map(function () {return 0 });
console.log('arr4:' + arr4);    // -> [0, 0, 0]

Underscore.jsとかのライブラリを使えば、もっと簡単にできそう。



参考サイト





以上

written by @bc_rikko


0 件のコメント :

コメントを投稿