【JavaScript】多次元配列を生成する関数
JavaScriptには、他の言語(Java, Python, C++, etc.)が標準で持っている「多次元配列」がありません。
多次元配列はとても汎用性の高いデータ構造なので、JavaScriptでも多次元配列を使いたいところです。
例えば、以下の2次元配列を宣言するプログラムは、エラーになります。
var a = [][];
(注)多次元配列の多次元とは、2次元以上のことです。
(注)JavaScript でも、1次元配列(多次元でない)は標準装備されています。
2次元配列の宣言・生成・使用
Java の場合
例えば、Java で配列名(book)の宣言と生成は以下となります。
int book[][]; // 2次元配列の宣言 book = new int[3][5]; // 2次元配列の生成
配列の生成後、その配列を使用することが可能になります。
book[0][0] = 10; // 2次元配列の使用
JavaScript の場合
JavaScript で、配列名(book)の生成は以下となります。
var book = []; // 1次元配列の宣言 prep2D(book, 3, 5); // 2次元配列の生成
ここで、今回作成する「多次元配列を生成する関数(prep2D)」を使用しています。
配列の生成後、その配列を使用することが可能になります。
book[0][0] = 10; // 2次元配列の使用
2次元配列を生成する関数(prep2D)
プログラム1.
// // preparation // var book = []; prep2D(book, 3, 5); // // test // book[0][0] = 10; document.write(book[0][0]); // // prep2D // function prep2D(a, x, y) { for (var i=0; i<x; i++) { a[i] = new Array(y); } }
プログラムの説明
プログラムの4-5 行目で、2次元配列(book)を使う準備をしています。
- 4 行目、bookを配列として宣言
それにより、関数prep2D に配列book を「参照渡し」しています。
参照渡しすることで、1次元配列から2次元配列の加工が可能になります。
10-11 行目は、2次元配列(book)の使用テストです。
prep2D
仮引数(入力)
- a: 1次元配列名 → 加工して2次元配列になる
- x: 1次元目の要素数
- y: 2次元目の要素数
2次元配列への加工(生成)
JavaScript では、配列の要素に配列を代入する(=)ことができます。
- 1次元配列の要素に、1次元配列を入れると、2次元配列になる
この性質を利用して、以下の手順で、1次元配列を2次元配列に加工します【1】。
- 宣言済み1次元配列(仮引数: a)を、1次元目要素数(x)だけ生成する
- 生成した各配列 a[ i ] に、1次元配列(要素数y)を生成し、代入する
【参考1】MDNインデックス付きコレクション#多次元配列
3次元配列を生成する関数(prep3D)
prep2D を3次元に拡張することで、prep3D が作れます。
プログラム2.
// // preparation // var book = []; prep3D(book, 3, 5, 2); // // test // book[0][0][0] = 10; document.write(book[0][0][0]); // // prep3D // function prep3D(a, x, y, z) { for (var i=0; i<x; i++) { a[i] = new Array(y); for (var j=0; j<y; j++) { a[i][j] = new Array(z); } } }