同じ値で満たされた多次元配列を作る方法です。
落ち物ゲーを作るときのパターンだとか、シミュレーションゲーのマップパターンだとかで使えます。
実際のところ
サンプルケースとして、-1で満たされた9 x 16の二次元配列を作るケースを考えます。
生JSの力技
追記:後述するように、これは生成後の使い勝手が悪いっぽいです
forでぶん回す方法をよく見かけます。
個人的には地獄ネストになって好きじゃないので、Array#fillを使った方法でやります。
a = Array(9).fill(Array(16).fill(-1)) /* [ [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ] ] */
mathjsをつかう
nodejsが使える環境なら、数式まわりを拡張するmathjsを使う手があります。
導入はnpmでらくらく。
$ npm install mathjs
最初にrequireする必要がある代わりに、その後の取り扱いが前述のArray方式より楽です。
math = require('mathjs') a = math.matrix().resize([9,16],-1) /* Matrix { _data: [ [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ], [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ] ], _size: [ 9, 16 ], _datatype: undefined } */
追記
Array#fillの多重化方式だと特定セルだけの更新ができないみたいです。
素直にmathjsを使ったほうがよさ気。
shuzo-kino.hateblo.jp