• ベストアンサー

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]); } } よろしくお願いいたします。

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

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

再現しません。 検証環境は以下とまったく同じです。 http://oshiete1.goo.ne.jp/qa3101381.html Q3102333.html <!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>実験</title> <style type="text/css"> p{background-color:red;} </style> <script type="text/javascript" src="Q3101381.js"></script> </head> <body> <p onclick="hoge();">ほげ</p> </body> </html> Q3102333.js function hoge(){ 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++){ alert(i +":" + j +":" + data[i][j]); } } } 0:0:1 から 2:2:9 まで全て表示されました。

capetown
質問者

お礼

再度試したところ、動作しました。 おさわがせいたしました。 おそらく元のソースでは、 x = data[i];として x.lengthとしていた可能性があります。 が、これでも再度試すと動作しました。 何かスペルミスをしていたかも知れません。

その他の回答 (1)

回答No.2

すまん、検証環境張り間違えた こっちのつもりだった。 http://oshiete1.goo.ne.jp/qa3100997.html IE6 on WinXP Pro SP2[EN](VPC) Safari 3.0.1Beta on WinXP Pro SP2[EN](VPC) IE7 on WinXP Pro SP2[JA] Minefield(Firefox 3.0a6pre) on WinXP Pro SP2[JA] Opera 9.21 on WinXP Pro SP2[JA]

関連するQ&A

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

  • JavaScriptでの動的な多次元配列の生成方法

    JavaScriptで多次元配列を生成する方法を教えて頂きたく思います。 現在下記の様なコードを作成しています。 resArrayNowという多次元配列を作っておいて、[name][point1][point2] というnx3次元配列を動的に作成したいと思っています。 しかし、下記の様なプログラムを作成したところ、 if(resArrayNow.length==0){ の中入ったところで、実行されなくなっているようで上手くいきません。 どなたか、JavaScriptの多次元配列を動的に作成していく方法をご教授下さい。 宜しくお願いいたします。 ----------------------------------------------------------------------- var resArrayNow = Array(); arrayAdd("tom,1,45"); arrayAdd("ken,2,61"); arrayAdd("mike,33,5"); function arrayAdd(msg){ // カンマで分割し配列に格納 var resArray = msg.split(","); /*resArrayNowに格納されているIPアドレスと同じアドレスからのメッセージ * だった場合はx,yの値を更新、アドレスがなかった場合は新たに配列を追加する */ if(resArrayNow.length==0){ resArrayNow[0][0]=resArray[0]; resArrayNow[0][1]=resArray[1]; resArrayNow[0][2]=resArray[2]; alert(resArrayNow.length); } else{ for(var i = 0;i < resArrayNow.length;i++){ if(resArrayNow[i][0] == resArray[0]){ resArrayNow[i][1]=resArray[1]; resArrayNow[i][2]=resArray[2]; }else if(i== resArrayNow.length-1){            /*最後までIPアドレスを探して一致するIPが *resArrayNowになかった場合は新たに配列を追加する。 */ resArrayNow[i+1][0]=resArray[0]; resArrayNow[i+1][1]=resArray[1]; resArrayNow[i+1][2]=resArray[2]; } } } }

  • JavaScriptで配列を取得したい

    お世話になります。 データベースから取得したリスト(可変)をフォームに設定したところ、 JavaScriptで配列を参照したところ、リストが1件の場合はエラー、 3件の場合は正常という現象がおき、困っております。 リストが1件の場合でも、配列に認識させたいのですが、 他の箇所も記述が多いためシンプルな手法を探しています。 よろしくお願い致します。 3件のレコードの場合、正常に処理される。 ---- HTML内 -------------- <input type="checkbox" name="chk_sel"> <input type="checkbox" name="chk_sel"> <input type="checkbox" name="chk_sel"> ---- JavaScript内 -------------- function test(){ var obj = document.form1.chk_sel; if (obj != null) { for(i=0;i<obj.length;i++){ if(obj[i].checked == true){ check_num++; } } } } ----------------------------- ■1件のレコードの場合、エラーになる (配列に認識されないらしく、obj.lengthが取得できない) ---- HTML内 -------------- <input type="checkbox" name="chk_sel"> ---- JavaScript内 -------------- function test(){ var obj = document.form1.chk_sel; if (obj != null) { for(i=0;i<obj.length;i++){ if(obj[i].checked == true){ check_num++; } } } } -----------------------------

  • javascriptの2次元配列をソートの仕方

    function word_grouping(data) { var code = data; //先頭についている”code="を除去 code = code.replace("code=",""); var = code.split(","); var alpha =new Array(); alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M']; //2次元配列作成 var array = new Array(); for (i =0; i < alpha.length; i++) { array[i] = [' ','0']: } //グループ名を格納 for( i = 0; i <alpha.length; i++){ array[i][0] = alpha[i] //0番目の項目から順番にグループごとに分ける for( i = 0; i < sp.length; i++){ group = sp[i].substring(0.1); //どのグループに所属しているか調べる for( j = 0; j < alpha.length; j++){ //一致したグループの配列にカウント+1していく if(group == array[j][0]{ array[j][1]++; } } } メモ ・spにはグループのどこかに所属する20個のキーワードが入っていてそれをグループに振り分けている ・グループ分けには”A001”のAだけみて振り分けています したいこと ・arrayに入ったキーワードの数を降順で並び替えたい 分からない所 ・2次元配列をsortする仕方 こんな感じなんです わかる方回答お願いします。

  • 配列からNULL以外のキーを取得したいのですが……

    配列からNULL以外のキーを取得したいです。 [0, 3]を期待しているのに、[0, 3: 3] で返ってきます。 なんででしょうか? function test(data) {  var result = [];  for (var i = 0, l = data.length; i < l; i++) {   if(data[i] !== null){    result[i] = i;   }  }  return result; } var data = ["1", null, null, "5"]; var last = test(data); console.log(last); ・console.logだから? ・もしそうなら、どうして[ 0: 1, 3: 3] ではないのでしょうか?

  • 配列の中の一部を削除する方法がわかりません。

    配列の中の一部を削除する方法がわかりません。 Javascriptに、連想配列はないと、どこかのサイトで書いてありましたが やりたいことは、ある配列(連想配列)というより、オブジェクト?があり、 そこにキーと対応すrる値があるデータがあります。 キーを手がかりに、削除して一部のデータを削除する書き方を教えて欲しいです。 例えば var a = new Array(); for (var i = 0; i < 10; i++) { a[i] = [i]; } // この段階では、0=>[0], 1=>[1] ... 9=>[9]のデータがありますが、 // a[3] a[5] a[8]のデータをここで削除したい。 // 今回は、数値がキーですが文字列の場合も可能でしょうか? ??? for ( var i = 0; i < a.length; i++) { alert(a[i]); } // 7個のデータが表示される。 よろしくお願いいたします。

  • 二次元配列に数字をランダムに入れる

    --------------------------- | 2 | 3 | 7 | 4 | 1 || 17 |<横合計> --------------------------- | 6 | 1 | 2 | 3 | / || // | --------------------------- | 1 | / | / | / | / || // | --------------------------- | 2 | / | / | / | / || // | --------------------------- | 3 | / | / | / | / || // | --------------------------- --------------------------- | 14 | / | / | / | / || // |<全合計> --------------------------- <縦合計> このように表示される。 …という処理がしたいのですがどういう処理を書けば良いのかわかりません。 理解した(1)と(2)の乱数発生の文を書いておきます。 *二次元配列を作成* a = new Array(5) for (i = 0; i <= a.length-1; i++){ //1次元 a[i] = new Array(5) for (j = 0; j <= a[i].length-1; j++){ //2次元 a[i][j] = "["+ i +","+ j +"]" var g = ""; document.write(a[i][j]); } } *乱数を100回発生* var z = ""; for(k = 1; k <= 100; k++){ z = Math.round(Math.random()); //発生した乱数をzに代入 } 以上、 よろしくお願いいたします。

  • 多次元配列を動的に取る方法で悩んでいます。

    現在、以下のコードで三次元配列を動的に取る方法を作成しています。 { int i,j; char ***Regdata; LPVOID heapAdr; Regdata = (char ***)HeapAlloc(GetProcessHeap(),HEAP_NO_SERIALIZE,sizeof(char) * 1000); for(i=0;i<=1000;i++){ heapAdr = HeapAlloc(GetProcessHeap(), //ここでエラーが発生します。 HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, sizeof(char) * 6); if(heapAdr != NULL) { Regdata[i] = (char **)heapAdr; for(j=0;j<=6;j++){ heapAdr = HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, sizeof(char) * STRING_LENGTH); if(heapAdr != NULL) { Regdata[i][j] = (char *)heapAdr; } else { break; } } } else { break; } } } この方法だと、約40~50回ループした時点でHeapAlloc関数のところで 実行時エラーが発生してしまいます。 GetLastError関数を用いてエラーメッセージを取得したところ、 「No 998:メモリの場所に無効なアクセスがありました。」 というメッセージが返ってきました。 現状、どうしたらよいのかわからない状態です。 ご存知の方がいらっしゃれば、お教えいただきたいです。 以上、宜しくお願いします。

  • 多次元配列のkeyをカウントUPしながら取得したい

    お世話になります。 for文をその分記述すれば、得たい値は取得できるのですが、スマートではない為、多次元配列のkeyをカウントアップしながら取得できれば・・・と、ハマってます。 どのように記述すれば可能でしょうか。 callback({ "IMG" : [ { "src" : { "url1" : "http://domain.com/", "url2" : "http://domain.com/", "url3" : "http://domain.com/" } }, { "src" : { "url1" : "http://domain.com/", "url2" : "http://domain.com/", "url3" : "http://domain.com/" } }, { "src" : { "url1" : "http://domain.com/", "url2" : "http://domain.com/", "url3" : "http://domain.com/" } } ] } ); $(function(){ $.ajax({ type: 'GET', url: './jsonp.js?callback=?', dataType: 'jsonp', jsonpCallback: 'callback', success: function(data){ str = $('<ul id="tiles"></ul>'); /*下記のやり方で取得可能ですが、物凄く冗長な為、簡素に記述したいのです for (var i in data.IMG) { var imgsrc = data.IMG[i].src.url1; alert( "imgsrc="+imgsrc ); } for (var i in data.IMG) { var imgsrc = data.IMG[i].src.url2; alert( "imgsrc="+imgsrc ); } for (var i in data.IMG) { var imgsrc = data.IMG[i].src.url3; alert( "imgsrc="+imgsrc ); } */ var ary=new Array(1,2,3); for(n in ary) { for (var i in data.IMG) { var url = 'url'+n; var imgsrc = data.IMG[i].src.url; alert( "url="+url ); } } }); }); どなた様かご教授戴けますようお願い致します。

  • javascript 連想配列

    初めて連想配列で処理を行っております。いろいろグーグル等で調べましたが、どうしてもできないので、ご教授頂けますでしょうか。 phpからjavascriptにデータを渡し、連想配列化する必要がありまして、以下の通りにやってみました。配列化は自動化したく、for文でこのようにしてみました。phpの大部分は少々長いので省きますが、ざっとこんな感じです。 var place = <?PHP echo $place ?>; //東京、大阪、名古屋 var address = <?PHP echo $add ?>; //東京都、大阪府、名古屋市 var Data = new Array();   for(i=0;i<place.length;i++){ Data[i].push({add1:place[i] , add2:address[i]});   } alert(Data[0]); ------------------------------- 上記の方法ですと、placeとaddressには正しく値はphpから渡されるのですが、肝心なDataはなにも出力されません。エラーもなく、まっさらです。 理想系は、以下の方法の通りにしたいと思っております。 下記はフリーウェアの中身を今回の案件に手直ししたものです。 Data = [{  add1: "東京",  add2: "東京都" }, {  add1: "大阪",  add2: "大阪府" }, {  add1: "名古屋",  add2: "名古屋市" }]; この場合と同じ結果が出力されれば完成なのですが・・・ 例えば、Data[0]をalertすると、「object object」と出力されます。 現在は3件で開発を行っておりますが、今後はどんどん増えていくので、自動化させるためにfor文か、for in文を使ったほうがいいのかな と思っているのですが、力及ばず詰まっております。 どうかお助けください。 よろしくお願い致します。

専門家に質問してみよう