• ベストアンサー

多次元配列とfor文について

javascriptの配列について質問です。 例えば: var arrXXX = new Array(); function samplefunc{ //3次元配列の種類の作成 for (m = 0; m < aaa.length ; m++) { //連想配列作成 arrXXX .push(aaa[m]); } for (j = 0; j < bbb.length; j++) { for (i = 0; i < ccc.length; i++) { arrXXX[aaa[j]] = new Array(ccc.length); arrXXX[aaa[j]][i] = new Array(ccc.length); for (k = 0; k < ddd.length; k++) { arrXXX[aaa[j]][i][k] = eee;     ここでは配列を適切に使える・・・ } } } ここでarrXXXを使いたいが、3次元配列でなくなっている?!  arrXXX[~][0][0]はnullまたはオブジェクトではありません・・・がでます。 } 結局、for文を完全にでてしまうと、せっかくつくった配列がダメになってしまいます。どうすればfor文外で配列を使用できるのか教えてください!

質問者が選んだベストアンサー

  • ベストアンサー
  • arexis
  • ベストアンサー率66% (66/99)
回答No.3

for (m = 0; m < aaa.length ; m++) { //連想配列作成 arrXXX .push(aaa[m]); } 最初のココですが、入れ込んでいる aaa[m] のaaaという配列は、 aaa = ['あ','い','う'] という値だけを持つ1次元配列ですか? aaaが1次元配列であれば、 arrXXX .push(aaa[m]);は arrXXX[数字] = aaaの各要素名; というただの1次元配列であって、 arrXXX[aaaの要素名]という連想配列にはなっていません。 下のfor文でarrXXX[aaa[j]]で連想のつもりでよびだして文字でnew Array()定義していますが、それで別で成り立つとして、最初のfor文とはある意味関連性が無いです。 aaaが1次元で、 arrXXXと言うのを連想配列にするなら for (m = 0; m < aaa.length ; m++) { //連想配列作成 arrXXX[aaa[m]] = new Array(); } aaaが多重配列だった場合は、 arrXXX[aaa[j]] = new Array() は成り立たないのでは?

suucha
質問者

お礼

ありがとうございます。 この指摘のとおりでした。。 連想配列とpushの関係・・・ 勉強します!

その他の回答 (2)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.2

>arrXXX[~][0][0]はnullまたはオブジェクトではありません・・・がでます。 そのまんまなんじゃ? 「~」がどういう指定の仕方になっているのかわからないけど ここが正しくないだけだと思うよ。 なんなら使う直前で「~」をalert辺りで中身出してみたら判るんじゃないかな。

suucha
質問者

補足

返答ありがとうございます。 ~は正しく指定してもダメでした。

回答No.1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Q3667755 TestCase 1</title> <script type="text/javascript"> // <![CDATA[ var arrXXX = new Array(); var aaa = new Array("a","b","c"); var bbb = new Array("d","e","f"); var ccc = new Array("g","h","i"); function samplefunc(){ //3次元配列の種類の作成 for (var m = 0; m < aaa.length ; m++) { //連想配列作成 //俺は知らないけど,こういう作り方があるのね? arrXXX.push(aaa[m]); } //気分の問題で変数iとjを入れ替えている。 //多分こうしたいのだろう。bbb.length →aaa.length for (var i = 0; i < aaa.length; i++) { //【毎回初期化されたくはない】ので,外に出してみた。 arrXXX[aaa[i]] = new Array(bbb.length); for (var j = 0; j < bbb.length; j++) { arrXXX[aaa[i]][j] = new Array(ccc.length); for (var k = 0; k < ccc.length; k++) { arrXXX[aaa[i]][j][k] = i * Math.pow(10,2) + j * Math.pow(10,1) + k * Math.pow(10,0); } } } alert(arrXXX["b"][2][0]) ; // 120 } //]]> </script> </head> <body> <p onclick="samplefunc();">ほげ</p> </body> </html>

suucha
質問者

補足

返答ありがとうございます。 上記のではうまくいきました。 もうすこしがんばってみます。