• ベストアンサー

javascriptで質問があります。

title1で連想配列からaとbの値を出したいのですがundefinedが出ます。 どうすればいいのでしょうか。教えていただけると助かります。 <script type="text/javascript"> <!-- t0000={title:"a",id:"kin"}; t0001={title:"b",id:"gin"}; i=0; while(i<2){ c = "t000"+i alert(c); title1 = c["title"]; alert(title1); i++ } //--> </script>

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

eval使うなら、このほうが近いのではなかろうか? (判じものみたいなので、わかんないけれど) t0000={title:"a",id:"kin"}; t0001={title:"b",id:"gin"}; i=0; while(i<2) { c = "t000"+i; alert(c); title1 = eval(c + '["title"]'); alert(title1); i++ } --------------------------------- いっぱいある場合は、t000, t001・・・などを配列にして#1様のように定義しておく方が便利。 そうしておけば、evalを使わなくてもアクセスが可能になります。 t = [ {title:"a",id:"kin"}, {title:"b",id:"gin"} ]; i=0; while (i<2) alert(t[i++]['title']);

nezaway
質問者

お礼

回答ありがとうございます。 たしかに大量にあります。 下記の方がいいのでしょうか。

その他の回答 (3)

回答No.4

これってクイズ? t0000={title:"a",id:"kin"}; t0001={title:"b",id:"gin"}; i=0; while(i<2){ c = "t000"+i alert(c); alert(window[c].title); i++ }

nezaway
質問者

お礼

回答ありがとうございます。 いえいえクイズではありません。 なるほどwindowもあるのですね。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

もとのプログラムを出来るだけ変えないとすると、 t0000={title:"a",id:"kin"}; t0001={title:"b",id:"gin"}; i=0; while(i<2){ c = "t000"+i alert(c); title1 = eval(c+'["title"]'); alert(title1); i++ } cは文字列なので、変数名と見なすためにはevalが必要。

nezaway
質問者

お礼

回答ありがとうございます。 変数として使えるように変換するのですね。 勉強不足でした。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

こおゆう事 c=[{title:"a",id:"kin"},{title:"b",id:"gin"}]; i=0; for(var i=0;i<2;i++){ eval ('var title' + i +'=c[' + i + '].title;'); alert(eval('title' + i)); } ちがう~...

nezaway
質問者

お礼

回答ありがとうございます。 なるほどeval()というものを使うのですね

関連するQ&A

  • Javascriptで、連想配列の探索でindexOfが使えると思って

    Javascriptで、連想配列の探索でindexOfが使えると思っていたら、prototype.jsを使っていました。 何も使わず、標準のJavascriptで連想配列を探索する(キーの存在チェック)は可能でしょうか? var a = [ "x":100, "y":200, "z":300 }; a["s"] はundefinedだったので、 if (undefined != a["s"]) { ... } でも構わないのでしょうか? すべてのブラウザでundefinedを返す仕様になっているなら、 undefinedで比較しようと思いますが、 undefinedの使い方は間違いでしょうか? あと、既出で申し訳ないのですが、Javascriptの仕様はどのURLを見ればわかりますか? undefiendのことも書かれているのでしょうか?

  • javascriptについて教えてください。

    divのボタンを作りたいと思い、調べながらjQueryを使う方法は以下のようにしたらいい事は分かったのですが、jQueryを使わずにしようと思い $(function(){ $("div").click(function(){ var x = this.id; alert(x); }); }); の部分を document.getElementsByTagName("div").onclick = function(){ var x = this.id;  alert(x); }; としてみたのですが、うまくいきません。jQueryを使わずに同じようなボタンを作るにはどうしたらいいのでしょうか? <!doctype html> <html> <head> <meta charset="UTF-8"> <title>無題ドキュメント</title> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.4.min.js"></script> <script type="text/javascript" language="javascript"> $(function(){ $("div").click(function(){ var x = this.id; alert(x); }); }); </script> </head> <body> <div id="aaa" class="div_link">a</div> <div id="bbb" class="div_link">b</div> <div id="ccc" class="div_link">c</div> <div id="ddd" class="div_link">d</div> <div id="eee" class="div_link">e</div> </body> </html>

  • javascriptでのオブジェクト参照について

    asp.netを使用しています。 javascriptで半角カナが入力されたら、アラートを出す処理を行いたいと思っていて、以下のようなプログラムをネットで拾ってきました。やりたいことはこれで可能なのですが、問題が...。 javascript部分とhtml部分を分けて、 <script language="JavaScript" src="kana_check.js"> </script> 汎用性が高い処理ですので、外部ファイルとして読み込んで使用したいと考えています。 ですが、script部分を外部ファイルに分けて、読み込んで使用しようとすると、「オブジェクトを指定してください」というエラーが出てしまいます。恐らく、オブジェクト参照がうまくできていないのだと思うのですが、どういう風に指定していいのかが分かりません。 (以前も、同じくオブジェクト参照について質問した事があるのですが、今回もどうしていいものか...) ご教授いただけないでしょうか?よろしくお願い致します。 <html> <head> <title></title> <script> <!-- function hkCheck(myFIELD){ baseStr=myFIELD.value; for(i=0;i<baseStr.length;i++){ var targetStr=baseStr.charAt(i); if(targetStr>="。"&&targetStr<="゜"){ alert("半角カナは使用できません"); myFIELD.focus(); return ; } } } --> </script> </head> <body> <form runat="server"> <input type="text" size="16" id="tb_a" name="tb_a" onBlur="hkCheck(this.form.tb_a)" runat="server" /><br> <input type="text" size="16" id="tb_b" name="tb_b" onBlur="hkCheck(this.form.tb_b)" runat="server" /><br> </form> </body> </html>

  • jQueryでクリックされた要素のidを関数で取得

    以下のようなソースで、クリックされた要素のidをアラートで出したいとき、class: alphabetのa要素ををクリックすると、undefinedと出ます。 関数でthisを使うと呼び出し元のことを指さないので、クリックされた要素のidは出ないということなのですが、こういった場合、クリックされた要素のidを取得して、表示したい場合はどのようにすればよいか教えてください。 [htmlソース] <a class='alphabet' id='a' href='' onclick="return false;">A</a> <a class='alphabet' id='b' href='' onclick="return false;">B</a> <a class='alphabet' id='c' href='' onclick="return false;">C</a> <script src="jquery.min.js"></script> <script type="text/javascript"> $(function(){ $('.alphabet').click(function(){ function alertAlphabet(){ alert($(this).attr('id')); }; alertAlphabet(); }); }); </script>

  • IEだけで動きません。Javascriptに関する質問です。

    IEだけで動きません。Javascriptに関する質問です。 初心者です。よろしくお願いします。 下記のページを作りました。 menuをクリックすると、ページが現れるようにしています。aaa.jsで制御しています。 ページの高さがそれぞれ違うので、bbb.jsで高さを取得しています。 IEでは、bbb.jsのwindow.parent.document.getElementById('obj')で「オブジェクトがありません」とエラーが出て、動きません。 他のブラウザでは動きました。 どうしてでしょう? 悩んでいます。 どなたか教えてください。よろしくお願いいたします。 <html>   <head> <link rel="stylesheet" type="text/css" href="main.css" media="screen,print" /> <script type="text/javascript" src="aaa.js"></script>   </head> <body>   <div id="container">   </div>       <div id="menu">    <ul>    <li><a href="javascript:changeObj('a.htm')" title="a">a</a></li>    <li><a href="javascript:changeObj('b.htm')" title="b">b</a></li>    <li><a href="javascript:changeObj('c.htm')" title="c">c</a></li>    </ul>   </div>     </body> </html> ***aaa.js*** /* オブジェクトの変更 */ function changeObj(html){ var contents = '<object id="obj" data="' + html + '" type="text/html"><\/object>'; window.document.getElementById('container').innerHTML = contents; } ***main.css*** /* obj */ #obj{ visibility:hidden; position:absolute; right:5%; min-width:560px; background-color:#CCFFFF; z-index:1; border-style:none; overflow:visible; } ***a.htm*** <html>  <head> <script type="text/javascript" src="bbb.js"></script>  </head>   <body> <div id="page-height"> <div id="a"><!--ここにページ内容--> </div> </div>   </body> </html>

  • PHPとJavascriptの連携について

    PHP・Javascriptの初心者です。 PHPで設定された、配列のデータをJavascriptで作成した関数の渡したいのですが どうすればいいのでしょうか? 以下にサンプルを作成したのですが PHPで設定した、配列 $name が Javascriptに渡せません。 何が悪いのですか? 教えてください。 よろしくお願いします。 -sample.php- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <!-- CSS: implied media="all" --> <link type="text/css" rel="stylesheet" href="css/websyslogin.css" /> <!-- JavaScript loading --> <script src="js/websysdebug.js"></script> <script type="text/javascript"> function sysdebug( ss ){ alert( "Login -> "+ss ); } </script> <!-- タイトル --> <title>Vware Web System(PHP) </title> </head> <body> <?php $name = array(); $name[0] = "ABC"; $name[1] = "BCA"; ?> <input type="button" value="TEST" name="debug" id="debug" onclick="sysdebug(' <?php print $name[0]; ?> ');" /> <script type="text/javascript"> for( i=0;i< 2;i++ ) { ss = ' <?php print $name['+i+']; ?> '; alert( ss ); } </script> </body> </html>

    • ベストアンサー
    • PHP
  • JavaScriptの論理演算子について

    JavaScriptの論理演算子について質問です。 「alert(e.target||e.srcElement);」の結果がtrue かfalseではなくて「object HTMLHtmlElement」となるのは何故なのでしょうか? JavaScriptでは"||"は論理演算子ではないのでしょうか? ----------------------------------------------------------------------- <body> <a id="id1">Textarea</a> <script> (function () {   var i = document.getElementById ("id1");   document.addEventListener("dblclick", addEL, false);   function addEL (e) { alert(e.target||e.srcElement);   } }) (); </script> </body>

  • [javascript] 配列を使ってテーブルデータのソート

    javascriptで配列を使ってテーブルデータのソートをしたいです。 [ {"t":"a", "n":1}, {"t":"b", "n":1}, {"t":"a", "n":2}, {"t":"a", "n":3}, {"t":"b", "n":2} ] 上記をソートして下記の様にしたいです。 {"t":"a", "n":1}, {"t":"a", "n":2}, {"t":"a", "n":3}, {"t":"b", "n":1}, {"t":"b", "n":2} ] 以下の様に書いてみました。 <html> <head> <SCRIPT LANGUAGE='JavaScript1.2'><!-- var list1 = [ {"t":"a", "n":1}, {"t":"b", "n":1}, {"t":"a", "n":2}, {"t":"a", "n":3}, {"t":"b", "n":2} ]; list1.sort(function(a, b) {return a.t-b.t||a.n-b.n}); var text1=""; for(var i=0; i<list1.length; i++) { text1 += "<br>" + list1[i].t + " " + list1[i].n; } function init(){ document.getElementById("o").innerHTML = text1; } //--></script> </head> <body onload="init()"> <div id="o"></dev> </div> </html> 実行すると下記の様に表示されました。 a 1 b 1 a 2 b 2 a 3 期待してる結果は以下です。 a 1 a 2 a 3 b 1 b 2 なにが悪いのでしょうか? 因みに、テーブルデータが以下の様に数値だけのの場合、 var list1 = [ {"t":1, "n":1}, {"t":2, "n":1}, {"t":1, "n":2}, {"t":1, "n":3}, {"t":2, "n":2} ]; 実行結果は 1 1 1 2 1 3 2 1 2 2 の様になりました。 数値の場合、 list1.sort(function(a, b) {return a.t-b.t||a.n-b.n}); の式で問題ないのでしょうが、 文字列の場合、この式ではダメなんだろうなと考えてます。 以上、よろしくお願いいたします。

  • javascript 二つの配列を比較し等しいもの

    すべてをdocument.writeする (x番目とi番目が等しいです。) タイトルが長くなってしまいました。 ひとまず、こんな形で実現できたのですが、もっとスマートな形でできないでしょうか・・? a=[2,9,8,4,3,5,7]//a配列 b=[9,2,4,5,7,3,8]//b配列 for(i=0;i<a.length;i++){ if(a[0]==b[i]){ document.write("a[0]と"+i+"が等しい<br/>"); } if(a[1]==b[i]){ document.write("a[1]と"+i+"が等しい<br/>"); } if(a[2]==b[i]){ document.write("a[2]と"+i+"が等しい<br/>"); } if(a[3]==b[i]){ document.write("a[3]と"+i+"が等しい<br/>"); } if(a[4]==b[i]){ document.write("a[4]と"+i+"が等しい<br/>"); } ~~~以下同じ略 } ※a配列b配列は同じ値をもっていますが毎回シャッフルされます。

  • JavaScriptの連想配列について

    myArray = new Array();  myArray["A001"] = new Array();   myArray["A001"]["B001"] = "B001";   myArray["A001"]["B002"] = new Array();    myArray["A001"]["B002"]["C001"] = "C001";    myArray["A001"]["B002"]["C002"] = "C002";  myArray["A002"] = "A002"; JavaScriptの連想配列について質問させて頂きます。 例えば上記のような配列があったとして、値とキーはそのままで "C001" と "C002" の"B002"配列への格納順序だけ入れ替えたい場合、 どのように実装すればよろしいでしょうか? ちなみにキーや値はサンプルで実際にはsort出来るルールはありません。。。 ※入れ替え後のイメージ --------------------------------------------------------------------- myArray = new Array();  myArray["A001"] = new Array();   myArray["A001"]["B001"] = "B001";   myArray["A001"]["B002"] = new Array();    myArray["A001"]["B002"]["C002"] = "C002"; ←格納順序が    myArray["A001"]["B002"]["C001"] = "C001";  入れ替わった  myArray["A002"] = "A002"; ---------------------------------------------------------------------