• ベストアンサー

二次元配列に値をセットしたいんですが

ASP(html)での変数をJavaScriptに渡して 二次元配列を作成したいのですが、どうもうまくいきません。 どなたか、ご教授願います。 サンプル 変数:strFact = "'工場1', 1000, 20/'工場2', 500, 90/'工場3', 2000, 100/'工場4', 900, 10" -------------------JavaScript strFact_WK = <%=strFact %>  ※1 var test = new Array(); var rows = strFact_WK.split("/"); for( var i in rows) { test.push(new Array()); var cols = rows[i].split(","); for( var j in cols) { test[i].push(cols[j]); } } ---------------------- 当然ですが、 ※1の所で strFact_wk = "'工場1', 1000, 20/'工場2', 500, 90/'工場3', 2000, 100/'工場4', 900, 10" とすると作成されます。

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

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

var v = "'工場1', 1000, 20/'工場2', 500, 90/'工場3', 2000, 100/'工場4', 900, 10"; var a = v.replace(/'/g,'').split('/'); var i=0; while (a[i]) a[i] = a[i++].split(','); alert(a[1][2]); //90 きっと、またごみ。

yop_ikunan
質問者

お礼

回答ありがとうございます。 が、説明が分かり難くてスイマセン。 JavaScript内で変数に値をセットするのであれば、 質問のコードでもOKなんです。 ASP側から、変数をJavaScriptに受け渡す際に サンプルの変数が受け渡らないので、悩んでいます。 現在、回答#3を検証中です。

yop_ikunan
質問者

補足

同コードですが、 babu_baboo様の方が、簡単ですので使わせていただきます。 ありがとうございました。

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

その他の回答 (2)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

原因は #1 JavaScript に落とすときに、" が抜けてしまうため。 どうせ配列にするなら、JSON で渡す。 var test = [<% Response.Write( "[" + Regex.Replace( strFact, "\/", "],[" ), RegexOptions.Singleline ) + "]" %>]; ASP には明るくないので参考までに。

yop_ikunan
質問者

お礼

回答ありがとうございます。 私はJavaScriptに加え、ASPも初心者なので、回答を理解し、自分のコードに修正できませんでした。スイマセン。 で、今回の質問は ASP上での変数をinputタグに入れることで解決できました。 ありがとうございました。 ---------------------- <Form Method="post" Name="test"> <input type="hidden" name="strFact" value="<%=strFact %>"> </Form> <script type="text/javascript"> <!-- var cities; function factSet() { strFact = document.test.strFact.value; factry = strFact.replace(/'/g,'').split('/'); var i=0; while (factry[i]) factry[i] = factry[i++].split(','); } //--> </script> ---------------------------------

全文を見る
すると、全ての回答が全文表示されます。
  • atse
  • ベストアンサー率83% (36/43)
回答No.1

おそらく、変数strFactで使われている""の囲いは ASP上で文字列として認識させる為のものだと思うので、 出力されたHTML上のjavascriptでは、 strFact_WK = '工場1', 1000, 20/'工場2', 500, 90/'工場3', 2000, 100/'工場4', 900, 10 のようになっていると推測します。 ASPを扱ったことがないのでわかりませんが、 strFact_WK = "<%=strFact %>"; といった記述の変更をする必要があるのではないでしょうか。 HTML内などに出力されたjavascriptを見ることが出来るのならば、 それを見るのが解決の早道かと思いますよ。

yop_ikunan
質問者

お礼

回答ありがとうございます。 >のようになっていると推測します。 いいえ、最初の「工場1」しか取り込めないんですよ。 なので、回答#3を検証中です。

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

関連するQ&A

  • JavaScriptで取得した値について

    初めまして、Etizenと言います。 早速質問なのですが、JavaScriptで 例えば、 <SCRIPT LANGUAGE="JavaScript"> <!--  var QS = new Array;  if (location.search.length > 1)  {   var m_Array =    location.search.substr(1).split("&");    for (idx in m_Array)    { QS.push(m_Array[idx].split("="));    }  } //--> </SCRIPT> という、配列でデータを取得した場合にこれを、HTMLの <input type="text" name="STFCD" Value> のValueの中に仕込むことは可能でしょうか? よろしくお願い致します

  • 配列 代入

    JavaScript初心者です。 配列の代入で困っています。 var nums=new Array(); for(var i=0;i<3;i++){ nums[i]=i; // ☆ } // nums [0,1,2] ☆の行(コード)をnums.push=i; とするとnumsに2しか入っていないのですが、どういう仕組みでしょうか? よろしくお願いします。

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

  • 二次元配列のつかいかた。

    配列の中に、同じ値があるかどうか、確認して、なければ データを渡すというようなプログラムを書きましたが、どうもうまくいきません.二次元配列が間違っているのだと思いますが、どこがいけないのでしょうか. my @databe=qw(aa:ee:rr:rr aa:rr:tt:aa dd:tt:dd:aa); my @nonumber=qw(ringo mikan tamago susi); my @check=();#not same contents my $p=0; my @array=(); foreach( @databe ){ my @f = split(/:/); my $i=0; foreach(@f){ push( @{$array[$p]}, $_); $i++; } $p++; } for(my $i=2;$i<$#nonumber;$i++){ for(my $p=0;$p<$#databe;$p++){ unless($array[0][$i] eq $array[$p][$i]){ push(@check, $i); } } } foreach( @databe ){ my @f = split(/:/); my %tmp; $tmp{GEBEN1}=$f[$check[0]];#html::template $tmp{GEBEN2}=$f[$check[1]];#html::template push( @alldata,\%tmp); } プログラム初心者です。自分なりに組んでみたのですがどうもうまくいきません. 分かる方御回答よろしくお願いします。

  • URLから値(可変)を取得して値を引き渡す

    http://ample.com/goo?aaaa=12345 ?以降を取得して値を引き渡したいのですが location.searchで?以降を取得 取得した値を=で分割 formを使って情報を引き継ごうと思うのですがうまくいきません <script type="text/javascript" language="javascript"> <!-- var QS = new Array; if (location.search.length > 1) {  var m_Array = location.search.substr(1).split("&");  for (aaaax in m_Array) {   QS.push(m_Array[aaaax].split("="));  } } //--> <form action="form.cgi" method="post" name="FROM1" > <input type="hidden" name="aaaa" value=""> <script> <!-- document.forms["FROM1"].aaaa.value = location.search.substr(6,30); //--> </SCRIPT> </FORM>

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

    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>

  • サブルーチンの結果

    my @data; my ($rows,$cols); sub Gettest { use Text::ParseWords; my $dfile = shift; # CSVファイル my @array = @_; @data = (); open(IN, $dfile) or exit(-1);# while(<IN>) { chomp; my @fields = quotewords("," => 0 , $_); # カンマデータの取込 foreach my $field (@fields){ if(index($field, ":") >= 0) { my @range = split(':',$field);# 範囲の取出し $field = sub { my $v = shift; return $range[0] <= $v && $v <= $range[1];}; } elsif(index($field, ",") >= 0) { my @list = split(',',$field); #種類の取出し $field = sub { my $v = shift; return grep($v == $_, @list); };}} push @data, [@fields];} close(IN); $rows = @data; $cols = @{$data[0]}; return squeezed(@array);#// 該当範囲の絞り込み} sub squeezed { my @para = @_; my @pos = (0 .. ($cols -1)); my $i; my @wk; for($i = 0; $i < $rows -1; $i++) { @wk = (); foreach my $p (@pos) {# 有効な位置 my $test = $data[$i]->[$p]; if("CODE" eq ref($test)){ # 範囲テストコードの場合 push @wk, $p if &$test($para[$i]); # test がOK } elsif($para[$i] eq /$test/) {push @wk, $p; # マッチ位置を配列に}} @pos = @wk;} if(@pos == 1){ return $data[-1]->[$pos[0]]; } else {return undef;#// 該当なしか2個以上ならundefを返却 }}1; 引数によってCSVデータの範囲を絞って結果を返すといった関数を、ご提供して頂いた のですが、「1:4」や「1,3,4」等の答えがCODE(XXX)になってしまいます。ご提供者様から、ループで変換するのではなく 最終行のみ変更を加えないようにするというアドバイスを頂いて色々ためしてみたのですが、 私のレベルではサブルーチンの理解が出来なくて全然うまくいきません。他力本願な お願いで申し訳ないのですが、解る方教えて下さい。

    • ベストアンサー
    • Perl
  • forの中にいれたcreateTextの使い方

    はじめまして、 内容をまとめて書いてあるテキストがあり、これを変数に入れて分割したものを画面に表示させたいのですが、表示するところがうまくいきません。 createTextの書き方がおかしいと思うのですがどこを書き換えればいいのかわかりません。 すいませんがどなたかお教え願えないでしょうか。 var text1=new LoadVars(); text1.load("test.txt") text1.onLoad=function(){   var test_array:Array=text1.split(",");   for(var i=0;i<test_array.length;i++){   this.createTextField("c"+[i],this.getNextHighestDepth(),50,20+i*20,200, 20); this.c[i].text =test_array[i]; } 多分thisのあたりがおかしいと思っているのですが、どう書けばいいのかわかっていません。 すいませんがどなたかお願いします。

  • 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する仕方 こんな感じなんです わかる方回答お願いします。