• ベストアンサー

関数の引数として配列を渡す方法

初めて質問させていただきます。 現在下記のように関数に配列の引数を渡して、配列の個数を表示しているのですが、必ず0件になってしまいます。 <html> <head> <title>連続して関数を呼び出す</title> <script language="JavaScript"> <!-- function aaa (est) { alert(est.length); return; } // --> </script> </head> <body> <script language="JavaScript"> <!-- var hai = new Array(); hai["a"] = true; hai["b"] = false; aaa(hai); // --> </script> </body> </html> もしかしたら、受け渡し方が悪いのかもしれないのですが、色々調べても分からなかったので質問させていただきました。 argumentsというものを使うのかもしれませんがうまくいきませんでした。 分かる方がいらっしゃいましたら、ご教授ください。

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

  • ベストアンサー
  • aigaion
  • ベストアンサー率47% (287/608)
回答No.1

JavaScriptのlengthは関数じゃなくてプロパティです. 実際に配列のサイズを数えているわけではなく,一番大きい添字の値+1を返しているだけですので, ハッシュの分は考慮されません. 数えたければ自力で関数書いたらいいんじゃないかな? 例えば下のように function len(array) { var i = 0; for( key in array ){ i++; } return i; }

tomokidayo
質問者

お礼

いまいち自分の理解が足りなかったようです。 aigaionさんの教えていただいた方法で動作しました! 後はこれを応用して使用させていただきます ありがとうございました。

その他の回答 (2)

回答No.3

ANo.2です。 スミマセン、現在推奨のタグ間違ってました。 ダメなほうを記入していまいました。余分なことばかりスミマセン。 <script type="text/JavaScript"> http://hpzeroguide.web.fc2.com/htmlfile/script.html

回答No.2

基本的には配列の書き方が間違っているだけだと思います。 論理値までご存知ですから、プログラムの知識があるようですが、 基本的な書式が違います。 hai[0]=true;のように記入します。[]内数字は0からの連番配列数N-1 ----------------------------------------------------- <html> <head> <title>連続して関数を呼び出す</title> <script language="JavaScript"> <!-- function aaa (est) { alert(est.length); return; } // --> </script> </head> <body> <script language="JavaScript"> <!-- var hai = new Array(); hai[0] = true; hai[1] = false; aaa(hai); // --> </script> </body> </html> ---------------------------------- これで動作しますが、 HTMLにはインターネット上のマナーのようなものがあります。 実際にWEBコンテンツとして使う場合は気をつけましょう。 <script language="JavaScript"> でなく今では、 <script language="JavaScript" src="./test.js"> が推奨されています。 が存知かもしれませんが、HTMLのバージョンも記入します。 http://www.openspc2.org/reibun/HomePage/basic/001/

tomokidayo
質問者

お礼

shinya23soさん ご丁寧な回答ありがとうございます。 スクリプトタグやhtmlタグは本番環境ではきちんと書かせていただきます。 おしえていただいて気づいたのですが、 自分が使用しようと思っていたのは連想配列でした。 なのでArrayじゃなくてObjectを使わなくては駄目だったんですね! javascriptに関しては初心者なので、色々な誤解がありましたが、 教えていただいたことで勉強になりました。 ありがとうございました。

関連するQ&A

  • 引数付きで呼び出す関数・配列・name(id)のつけ方・・・?

    引数付きで呼び出す関数・配列・name(id)のつけ方・・・? 何を質問したいのかわからないタイトルになってしまいましたが とりあえず下のソースコードを見てください(実行してください)。 <html> <head><title>up</title> <script language="JavaScript"> <!-- num=new Array("5","5"); str=new Array("*****","*****"); function up(j) { num[j]++; str[j]+="*"; text[j].innerHTML=num[j]+str[j]; } //--> </script> </head> <body> <input type="button" value="1" onClick="up(0)"><div id="text1">5*****</div><br> <input type="button" value="2" onClick="up(1)"><div id="text2">5*****</div> </body> </html> 1のボタンを押すと上の文字列が反応し、2のボタンを押すと 下の文字列が反応するプログラムを書きたいのですが、どっちの ボタンを押して関数が呼び出され、どっちの文字列に処理を するか区別することができません、どうしたらよいのでしょうか? 下のようにひとつの時はできました・・・。でもふたつの時は どうしたらいいのかわかりません。 <html> <head><title>up</title> <script language="JavaScript"> <!-- num=5; str="*****"; function up() { num++; str+="*"; text1.innerHTML=num+str; } //--> </script> </head> <body> <input type="button" value="1" onClick="up()"><div id="text1">5*****</div> </body> </html>

  • スクリプト外部ファイルを変数で指定する方法

    スクリプト外部ファイル(例えば、bbb.js)をhtml内へ読込むには、 <script language="JavaScript" scr="bbb.js"></script> と書く事を知りました。 ファイル名を変数(aaa="bbb.js")に入れて、変数aaaで読込む方法を教えて下さい。 次のように、変数aaaにファイル名bbb.jsを代入して、読込みたいのですが、動作しません。 <body> <script language="JavaScript"> aaa=location.search; aaa=aaa.substr(1,(aaa.length - 1)); </script> <script language="JavaScript" src=aaa></script>

  • forEachをIEで使う方法はありますか?

    下記のコードは、javascriptのforEachを使って、配列の要素に対して順に処理をしていくものです。 forEachはFirefoxやChromeには対応していてInternetExprolerでは対応していないところまでは 調べて分かったのですが、その対策が分かりませんでした。 InternetExprolerでも動かすためにはどのようにしたらよいのでしょうか。 <html lang="ja"> <head> <title>テスト</title> </head> <body> <script type="text/javascript"> function aaa() { var ary = ["1", "2", "3"]; ary.forEach(bbb); function bbb(ccc) { alert(ccc); } } aaa(); </script> </body> </html>

  • 関数とarguments配列

    ●質問の主旨 下記サイト、CodeStudyによる JavaScriptの関数とarguments配列の 使い方に関する問題に対する 答えとなるコードの記述が分かりません。 どなたかアドバイスをお願いします。 CodeStudy 関数その2 3.arguments その3 http://jeek.jp/study/section18/3 ●問題文 関数checkが定義されています。 check内のif文により、引数が3つ以外の際は、 outputで"引数が3つではありません。"と出力させましょう。 function check(x, y, z) { if() { output("引数が3つではありません。"); } } check(1, 2, 3, 4); ●自分で作った途中経過 resultやreturnの使い方がよく分かりません。 function check(x, y, z) {  var result = 0; if(arguments.length !== 3) { output("引数が3つではありません。"); } return result; } check(1, 2, 3, 4); output(check); ●コードの条件(ヒント) argumentsは、引数を格納する配列で、 argumentsを使うと引数をいくつでもとることが出来ます。 また、argumentsは配列なので、 .lengthを使うと長さが求められます。

  • 関数内の配列を関数外で使うにはどのような方法がありますか?

    関数内の配列を関数外で使うにはどのような方法がありますか? 実際には以下のものです。 <!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> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>Google AJAX Feed API テスト</title> <meta http-equiv="content-script-type" content="text/javascript" /> <script type="text/javascript" src="​http://www.google.com/jsapi?key=​【キーコード】"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("【RSSアドレス】"); feed.setNumEntries(5); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var dd = new Date(entry.publishedDate); // now var yearNum = dd.getYear(); if (yearNum < 2000) yearNum += 1900; var date = yearNum + "."+(dd.getMonth()+1)+"."+dd.getDate()+" "; container.innerHTML += "<p>" + date +" <a href='" + entry.link + "' target='_blank'>" + entry.title + "</a></p>"; } } }); } google.setOnLoadCallback(initialize); </script> </head> <body> <div id="feed"></div> </body> </html> 最後の方の、container.innerHTMLを使わず配列として blogs.push(Date.parse(date),"<p>" + date +" <a href='" + entry.link + "' target='_blank'>" + entry.title + "</a></p>"); で、配列にpushして最後にdateでsortしたいのですが、どうでしょうか? 初心者なのでお手柔らかにお願いします!

  • 関数に配列を渡す方法?

    <script language="javascript"> <!-- function Test(va, arr){ } --> </script> ---HTML onClick="javascript:Test(this.form,array('0','3'));" こういうような事をしたい場合どうやってHTMLの方から配列を渡したらいいのでしょうか?

  • PHPの配列をjavascriptへ渡したい

    PHPの配列をjavascriptの配列に渡したいのですがやり方がわかりません。 変数の渡し方ならわかるのですが配列はどう渡せばいいのでしょうか? for文を使って渡せばいいと思うんですがどうやればいいか分かりません。 <?php $filedata=file("data.txt");//javascriptに渡したい配列 ?> <script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい </script> 何方か教えてください。

    • ベストアンサー
    • PHP
  • INPUTタグ以外からイベントハンドラを起動する方法

    はじめまして。 いろいろ調べたのですが、的確な答えが見つかりませんでしたので、ご教授お願いいたします。 訳あってonchangeイベントをタグの外から起動したいのですが、関数に括弧を付けると「実装されていません」というエラーが出てしまいます。 括弧を付けていない関数はうまく起動します。 どうしても関数に引数を渡してあげたいのですが、どのようにすればよいのでしょうか? 動作環境は IE5.5 windows2000 ASPにてJavaScriptを作成しています。 以下ソースを簡略化して記述しました。 よろしくお願いいたします。 <html> <head> <script TYPE="text/javascript"> <!-- function f_AAA(){ alert("AAA"); } function f_BBB(a_value){ alert(a_value); } --> </script> </head> <body> <form> <input type="text" name="text1" value="1"> <input type="text" name="text2" value="2"> <script TYPE="text/javascript"> <!-- // ↓括弧の付いていない関数は起動します。 document.forms[0].text1.onchange = f_AAA; // ↓括弧の付いている関数は起動しません。 document.forms[0].text2.onchange = f_BBB("OK"); --> </script> </body> </form> </html>

  • 引数が分かりません。

    JavaScriptの超初心者です。 (1)のmessageと(2)のmessageと(3)の'Hello JavaScript !'との相関関係がよく分かりません。  又、引数そのものの意味もよく分かりません。 どなたか教えて下さい、よろしくお願いします。 <html> <head><title>イベントハンドラーの定義</title>    <SCRIPT> <!-- function showMessage(message){                   (1) window.alert(message);                     (2)                    } //--> </SCRIPT> </head> <body> <center> <hr>イベントハンドラーの定義<hr><br> ボタンをクリックするとダイアログボックスが表示されます。<br><br> <form>   <input type="button" value="ここをクリック"    onclick="showMessage('Hello JavaScript !');">         (3) </form> </center> </body> </html>

  • getElementsByNameで要素が取得できない

    久々にJavaScriptを組みました。 以下のソースコードなんですが、ボタンクリック時にalertで「1」 が表示されるはずだと思っているのですが、「0」が返ってきます。 何かおかしなところはありますでしょうか?宜しくお願いします。 <html> <head> <script language="javascript"> function test(){ var obj = document.getElementsByName("name1"); alert(obj.length); } </script> </head> <body> <div name="name1"></div> <button onclick="test();">TEST</button> </body> </html>

専門家に質問してみよう