(一般的にオブジェクトリテラルを使うのが推奨されてるが)
そして、初期化直後の配列は何も入っていない空の状態で生成される。
コーディングする上で、どうしてもすべての要素をゼロで初期化したかったのだが、なんだかうまくいかない。
ということで、配列をゼロで初期化する方法を調べてみた。
配列をゼロで初期化する方法
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とかのライブラリを使えば、もっと簡単にできそう。
参考サイト
- Initializing an array with values – 2ality
- How to create a zero filled JavaScript array of arbitrary length? - Stack Overflow
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿