dポイントプレゼントキャンペーン実施中!

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文外で配列を使用できるのか教えてください!

A 回答 (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()
は成り立たないのでは?
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/15 09:57

>arrXXX[~][0][0]はnullまたはオブジェクトではありません・・・がでます。


そのまんまなんじゃ?
「~」がどういう指定の仕方になっているのかわからないけど
ここが正しくないだけだと思うよ。
なんなら使う直前で「~」をalert辺りで中身出してみたら判るんじゃないかな。

この回答への補足

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

補足日時:2008/01/11 15:50
    • good
    • 1

<!DOCTYPE html


PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<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>

この回答への補足

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

補足日時:2008/01/11 15:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!