• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FLASHでの多元配列がうまくいかなです・・・。)

FLASHでの多元配列の使い方について

このQ&Aのポイント
  • FLASHでの多元配列の使い方について悩んでいます。現在、40行で1行あたり5個の要素を持つデータを使用するために、慣れない操作に苦戦しています。データをロードしてから行毎にループをかけていますが、カテゴリ毎にループを行えるようにしたいです。
  • 以下のようなコードを書いていますが、何故か「undefined」と表示されてしまいます。新たな設定をお教えいただけると幸いです。 ```for(var i=0; i<theFileArray.length; i++){ var tempArray = theFileArray[i].split(","); var temp_id = tempArray[1]; var temp_cid = tempArray[0]; csvdate[temp_cid][temp_id] = {id:tempArray[0],cid:tempArray[1],price:Number(tempArray[2]}; } trace(csvdate[2][1].price); ```
  • 数日間ずっと試行錯誤しているのですが、うまくいかず困っています。分からない部分があるため、こちらで質問させていただきました。お力をお貸しください。

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

  • ベストアンサー
回答No.1

csvdate[temp_cid][temp_id] = {id:tempArray[0],cid:tempArray[1],price:Number(tempArray[2]}; } ここでcsvdateは配列として temp_cid番目に行を追加できますが そのcsvdateのtemp_cid番目の中身はまだnullです なので if(!csvdate[temp_cid])csvdate[temp_cid]=new Array() とか、temp_cid番目がまだnullなら あたらしい配列をそこに作る処理が 必要になると思います

aimtaku
質問者

お礼

早速の返答ありがとうございます。 僕自身もそこにいきついて、試したのですが、 上記のを入れてもダメでした。。。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Flash 配列

    Flashでcsvファイルを読み込みんでいます。 ▼csvファイル中身 a,あんぱん,100(改行) b,食パン,180(改行) c,カリーパン,120(改行) ▼AS --------------------------------------------------------- var abc = new LoadVars(); var itemlist:Array = new Array(); abc.onData = function(data) { itemlist = data.split("\r\n"); if (itemlist[itemlist.length-1].length == 0) { itemlist.pop(); } for (var i:Number = 0; i<itemlist.length; i++) { itemlist[i] = itemlist[i].split(","); } } abc.load("book1.csv"); --------------------------------------------------------- 上記のASで読み込んだcsvファイルのデータを解析しています。 trace(itemlist[1][1]) で「食パン」を取り出したり出来ています。 ここで、 あんぱん,食パン,カリーパン と、3つの要素を持つ配列を作りたいのですが、 どうすればよいのでしょうか? pushやsliceを使用したのですが無知な為うまくいきませんでした (T_T;)

  • FLASHでCSVを配列で読込後、読み込んだ配列を関数の外で使いたい。

    FLASHでCSVを配列で読込後、読み込んだ配列を関数の外で使いたい。 下記のスクリプトでCSVから配列を取り込みましたが、 関数の外で、「csvRows」変数の中身を見る方法が分かりません。。 var csvLoader = new LoadVars(); var theFileObj = new LoadVars(); var theFile = csvLoader.sendAndLoad("test.csv",theFileObj,GET ); var csvRows = new Array(); theFileObj.onData = function(src) { var theFileArray = src.split("\r\n").join("\n").split("\n"); var theFieldNames = theFileArray[0].split(","); var numberOfFields = theFieldNames.length; for(var j=0; j<numberOfFields; j++){ theFieldNames[j] = removeQuotes(theFieldNames[j]); } for(var i=0; i<theFileArray.length; i++){ var tempArray = theFileArray[i].split(","); csvRows.push(tempArray); } } function removeQuotes(theString){ if (theString.charAt(0) == '"' || theString.charAt(0) == "'") { return theString.substr(1, theString.length - 2); }else { return theString; } }

    • ベストアンサー
    • Flash
  • 重複しない乱数を作り配列に入れる(AS3.0)

    Flash Pro CS5 AS3.0 で記述しています。 1~10の整数をランダムかつ重複せずに配列に格納したいと考えています。 そこで,ネット上で参考になるソースを見つけ, 以下のように書き直しました。 var int_a = new Array(); var int_b = new Array(); function RandomInt():void{ //ここだけ変更すればよい var maxN:Number = 10;//乱数の最大値 //0~maxNの数字を全部配列に入れる for (var i:int=0; i< maxN; i++) { int_a[i] = i+1; } var j:Number = 0; var a_length:Number = int_a.length; //要は配列をシャッフルする while (a_length) { var int_r:Number = Math.floor(Math.random()*(maxN+1-j)); //乱発生した整数を配列int_bに順番に入れ、int_aから削除する int_b[j] = int_a.splice(int_r, 1); j++; //配列int_a内の数字が一つずつ減っていく a_length = int_a.length; } //ここで配列int_bがシャッフルされた trace(int_b); } RandomInt(); としました。 しかし出力結果がなぜか 8,2,4,9,,7,6,5,10,3,1のように抜けている部分があり, 次のフレームで for(var j:int=1; j <= 10; j++){   trace(int_b[j]); } として確認してもやはり 2 4 9 7 6 5 10 3 1 となってしまします。 どの部分がおかしいのか教えていただきたいです。 また,乱数発生の部分で Math.floor(Math.random()*(maxN+1-j)); という風に記述してあったのですが,ここは間違いではないのでしょうか? jを引いていくと発生する乱数の範囲が徐々に狭くなっていってしまうと思ったのですが; それとも元のソースコードを使って ttp://www.renowan.com/blog/?p=143 0~9までの乱数を発生させてそれぞれに1を足す方が簡単でしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • DataGridで数値を変更の際の処理について

    WinXP、Flash8Proにてオーサリングしております。 質問です。 下記のスクリプトで、ダイナミックテキストに設定した変数amount_hに変更された数量が追加されて いくようにしたいのですが、 なぜか、String扱いとなってしまって amount=2として、 amount_h+=amount; ←これを2回くりかえすと amount_hの値は22と表示されてしまいます。 なぜこうなってしまうのでしょうか? どうぞ宜しくお願いいたします。 /////////////////////////////////////// function CalcSum() { var sum:Number = 0; var sumamount:Number; _global.sum_value; for (var i = 0; i<my_dg.length; i++) { price_=my_dg.getItemAt(i).price; //priceから"円"を取り除く trace("price_1="+price_); price_=price_.substr(0,price_.length-1); trace("price_2="+price_); sumamount += my_dg.getItemAt(i).amount; sum=price_*my_dg.getItemAt(i).amount; trace("sumamount="+sumamount); trace("price_3="+price_); _global.sum_value+=sum; }//end of for if(newval==0){ if(sumamount==0 || !sumamount){ sum=0; F_CalcSum(sum); }else{ _global.sum_value_taxin=sum_value*1.05+trance_price; _pa.value_h=_global.sum_value; _pa.sum_value_h=_global.sum_value_taxin; trace("sumamount="+sumamount); _pa.amount_h = sumamount; } }else{ _pa.amount_h = sumamount; _pa.trance_h = _global.trance_price; _pa.value_h = _global.sum_value; _global.sum_value_taxin = _global.sum_value*1.05+trance_price; _pa.sum_value_h=sum_value_taxin; } return sum; }

    • ベストアンサー
    • Flash
  • 動的なcheckboxのcheckedについて

    動的にcgiから名簿tableを作り先頭にcheckboxを配置しています。 (□、コード、氏名) そのコードNo.取得し内容によってループ内でcheckboxをif文でオンオフしたいのですがコードNo.(rec[0])の取得方法がわかりません。できるはずとは思うのですが私の力不足で・・・。よろしくお願いします。 var recs = xhrObj.responseText.split("<r>"); var status2 = "<table id='meibo' ><tbody><tr>" +"<th width='20'><th width='40'>No.</th><th width='120'>氏名</th>" +"</tr>"; for(var i = 1; i < recs.length - 1; i++){ rec = recs[i].split("<i>"); status2 += "<tr><td><input type='checkbox' name='checkbox' id='"+i+"' /></td>"; status2 += "<td id='"+i+"' />"+rec[0]+"</td><td id='"+i+"' />"+rec[1]+"</td>"; status2 += "</tr>"; } status2 += "</tbody></table>"; document.getElementById("status2").innerHTML = status2; var observer = document.getElementById("meibo"); setListener(observer, "click", check);

  • Javascriptで二次元配列で高次元の配列サイズを取得する方法を教えてください。

    Javascriptで二次元配列で高次元の配列サイズを取得する方法を教えてください。 var data = [ [1,2,3], [4,5,6], [7,8,9] ]; for (var i = 0; i < data.length; i++){ for (var j = 0; j < data[i].length; j++){ <--- ここで lengthのオブジェクトがNullというエラーになります。 alert(data[i][j]); } } よろしくお願いいたします。

  • 配列に格納した値が保存されない

    DB(Access)から取得した内容を配列に格納し、その内容を取り出すプログラムを 以下のように書いてみました。 whileループ内の alert("ループの中=" + data_array[i]); では配列の中の値が参照できるのですが whileループの外で for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } 配列の中身を表示させようとしたところdata_array.length の長さが0になっており 配列の中身が参照できない状態です。なにが原因かわかりますでしょうか。 <html> <script language="javascript" type="text/javascript"> function dbSearch() { var sql="select * from URL where flg=0"; var database = dbConnect(); var recordSet = database.Execute(sql); var data_array = new Array(); while (!recordSet.EOF){ data_array[i] = recordSet(0); alert("ループの中=" + data_array[i]); recordSet.MoveNext(); } alert("長さ=" + data_array.length); for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } database.Close(); return; } //データベースに接続 function dbConnect() { var database = new ActiveXObject("ADODB.Connection"); database.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\\test.mdb;"); return database; } </script> <body> <input type="button" value="DB接続" onclick="dbSearch()"> </body> </html>

  • 配列を抜き出し新しい配列を作りたい

    いつも参考にさせて頂いています。 今あるボタンAに function sortFunc(a, b) { return a.ID-b.ID; } hoge = new Array(); hoge.push({ID:_root.g1, a:"○○", b:"mc_maru"}); hoge.push({ID:_root.g2, a:"△△", b:"mc_sankaku"}); hoge.push({ID:_root.g3, a:"□□", b:"mc_shikaku"}); hoge.sort(sortFunc); // 結果 { } for (var i = hoge.length; i>=0; i--) { trace(hoge[i].ID+hoge[i].a+hoge[i].b); this.key_text.text +=(("\r")+hoge[i].a); } } このような配列の並び替えをしています。 _root.g1、2、3の点数を受けて点数の高い順に並び替えしてる 物を_key.textと言うダイナミックテキストに渡して表示させています。 この並び替えを利用し点数の高いものを二つを抜きだしたいのですが、 Array.slice()をどうやって使えばいいのか分からず困っています。 わかる方いらしたら教えて頂けないでしょうか?

    • ベストアンサー
    • Flash
  • 二次配列のqsort

    二次配列のqsortについて分かる方に教えて頂きたいのですが 一段落のプログラムを載らせていただきました.count3[j][i]をバブルソートで降順でやってみましたが高速が要求されるため,qsortを使ってやり直したいのですが (ちなみにcount1[j][i],count2[j][i]は前で定義してあります.count4[j][i]にはiの順番を記憶するための二次配列です)  ぜひともよろしくおねがいします. int ind_near_search(int j,int t) { int i,var_num,count3[IND][VAR],count4[IND][VAR],temp1,temp2,num=0,m=0; for(i=0;i<VAR;i++){ if(individual[j].x[i]==1){ //変数が1と0の場合分け count2[j][i]=t-count[j][i]; }else{ count2[j][i]=count[j][i]; } if(individual[j].x[i]==1){ //全てcount3に値を入れる count3[j][i]=count2[j][i]; }else{ count3[j][i]=count[j][i]; } } for(i=0;i<VAR;i++){ count4[j][i]=num++; } for(m=0;m<VAR-1;m++){ for(i=0;i<VAR;i++){ //バブルソートにより降順に並べ換え if(count3[j][i]<count3[j][i+1]){ temp1=count3[j][i]; count3[j][i]=count3[j][i+1]; count3[j][i+1]=temp1; temp2=count4[j][i]; //count4にはcount3の並べ替え後の対応する番号を入れる count4[j][i]=count4[j][i+1]; count4[j][i+1]=temp2; } } } for(i=0;i<VAR;i++){ var_num=count4[j][i]; //count4の大きい順番からその番号をvar_numに渡す if(individual[j].x[var_num]==0){//0と1の場合分け individual[j].x[var_num]=1; }else{ individual[j].x[var_num]=0; }

  • 配列の検索

    今配列の中にIDとsp(speak)というものが入っていて、それのsp部分に入っている言葉検索したいんですがjavascript初心者のためやり方がわかりません。とりあえずarray配列を使っていれて 例えばchat_mss[0]にはchat_mss[0].idはidの1がはいっていてchat_mss[0].spにはhelloと入っています。このときに 入力方の検索でhと打ち込んだらhがつくものを全部出すことができますかこれができないと大学卒業できないのでぜひ力を貸してください。 わかる人はソースなど書いてほしいです。 参考にソースを載せます。english_list.phpはMysqlからIDとspををもらっています。 var chat_mss = new Array(); function chat_mss_atribute(){ } function english_speak(){ //alert(msg); var url='english_list.php'; //alert(pars); var myAjax = new Ajax.Request( url, {method: 'post', onComplete: add_to_array } ); } function add_to_array(english_msg_list){ var curr_english_msg= english_msg_list.responseText; //alert(curr_english_msg); var msg_show = curr_english_msg.split("\n"); //alert(msg_show[2]); var ln = msg_show.length; //alert(ln); for (i = 0; i < ln-2; i++){ var english_show = msg_show[i].split(","); //alert(english_show[1]); chat_mss[i] = new chat_mss_atribute(); chat_mss[i].id=english_show[0]; chat_mss[i].sp=english_show[1]; alert(chat_mss[i].id); alert(chat_mss[i].sp); } check_msg(); }