どうでもいいプログラム研究所

とある編集者によるIT、Web、ソフトウェア、プログラミングに関する雑記と覚え書き

JavaScriptで連想配列の中に連想配列を入れ子で入れる方法

JavaScriptを勉強しているとき、多次元配列を作る必要があり、いろいろと動作の実験をしてみました。ここでは自分用のメモとして以下のサンプルを作りました。連想配列を3つ重ねた3次元の配列です。

function test(){
  myArray = new Array();
  myArray =
    {ひらがな:
             {あ行:{a:"あ",i:"い",u:"う",e:"え",o:"お"},
              か行:{a:"か",i:"き",u:"く",e:"け",o:"こ"}
    },カタカナ:
             {ア行:{a:"ア",i:"イ",u:"ウ",e:"エ",o:"オ"},
              カ行:{a:"カ",i:"キ",u:"ク",e:"ケ",o:"コ"}
    }
};
 //配列の要素の呼び出し方は以下どちらでもよいようです。
  alert(myArray["ひらがな"]["あ行"]["e"]);
       // ==> "え"が出力される
  alert(myArray.カタカナ.カ行.o);
       // ==> "コ"が出力される

  /*ちなみに、配列の要素を変数を用いて呼び出したい場合*/
  var str1 = "ひらがな";
  var str2 = "か行";
  var str3 = "e";

  alert(myArray[str1][str2][str3]);
       //==> "け"が出力される
  alert(myArray.str1.str2.str3);
      // ==>この呼び出し方はできませんでした
}

調べていて、連想配列の要素を変数を用いて呼び出すやり方に謎を感じました。たとえば、以下の通常の配列の場合


array1 = ["あ","い","う","え","お"]


要素を取り出すときはarray1[0]のようにでくくって記述します。一方で、以下のように連想配列の場合


array2 = {a:"あ",i:"い",u:"う",e:"え",o:"お"}


要素を取り出すときは、array2.aのようにドットで記述しますし、通常の配列のようにarray2["a"]のような記述でも大丈夫です。


しかし!変数を使うときは以下のように、での記述しかダメ(?)みたいです。


var str1 = a;

array2 = {a:"あ",i:"い",u:"う",e:"え",o:"お"};

alert(array2[str1]);

//==>"あ"が出力される


素人の感覚からしたら、array2.str1って記述するのかなーと思いましたが違うのですね。不思議。ちなみに、自分のコーディングが間違ってるのか、多次元配列にするとき、通常の配列と連想配列の混在ってできないのだろうか・・動作しない・・