さっき、javascriptでの連想配列を
WebAPIでXMLで返すようにすると、画面部分が完全分離できる:その3クライアントにマスタデータで使って、
(ただし、このやり方だと、たとえば、cobolとか入力されると、undefinedとなってしまうので、ちょっと持ち方を、かえないといけないけど。。それについては、別の機会に書きます)
って書いたので、その話。つまり、2次元配列と連想配列の話題
■2次元配列を初期化して検索
もちろん、2次元配列を
var a = [["java","じゃば"],["perl","ぱーる"],["c","しー"],["php","ぴーえっちぴー"]]; |
みたいな形で、初期化して宣言してしまい、
ループをまわしてa[i][0]が、その値だったら、a[i][1]を返すってしてもいい。
2次元配列が面倒なら、
keyという配列にキーをいれ、valという配列に値を入れて、key[i]が、その値だったらval[i]を返すでもOK
これが、後述のchange1()のやりかた
■連想配列、ハッシュマップっぽいやりかた
もうひとつは、まえにやったように、
b["java"] = "じゃば";
みたいに、連想配列にいれて、
b[調べたい値] を直接引くひきかた。
でも、これだと、値がはいってないと、undefinedになるので、
そのときは、""に置き換える。
これが、後述のchange2()のやりかた
■ついでに連想配列のソート
ついでに、連想配列でやったときのソートについて書いておくと
(2次元配列のソートはふつうのソートなんで、省略)
キーの取り出し方は、よくわかんないので、もっといいやりかたがあるのかも
しれないけど、とりあえず
var i = 0; キーの配列 = new Array(連想配列.length); for( 一時的に入れるところ in 連想配列 ) { キーの配列[i] = 一時的に入れるところ; i++; } |
で、キーの配列を取得し、それをsortして、あとは、その配列を順番に取り出すかんじでできる。
■ソース
それらをまとめると、以下のかんじ
tx1(一番左上のテキストボックス)に入力すると、
2次元配列を検索して、となりのtx2に結果が
tx3(その下のテキストボックス)に入力すると、
連想配列を検索して、となりのtx4に結果が
ソートしてみるをクリックすると、連想配列のキーをソートして
並べ替えます。
<?xml version="1.0" encoding="utf-8"?> <!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"> <head> <title>キーワード表示・選択</title> <SCRIPT Language="JavaScript"> <!-- var a = [["java","じゃば"],["perl","ぱーる"],["c","しー"],["php","ぴーえっちぴー"]]; var b = new Array(4); b["java"] = "じゃば"; b["perl"] = "ぱーる"; b["c"] = "しー"; b["php"] = "ぴーえっちぴー"; //*==============================================// //* 関数:change1() *// // 内容:2次元配列の入力が変わった *// //*==============================================// function change1() { // 2次元配列 t1 = document.getElementById('tx1'); t2 = document.getElementById('tx2'); for(i = 0 ; i < a.length ; i ++ ) { if ( a[i][0] == t1.value ) { t2.value = a[i][1]; } } } //*==============================================// //* 関数:change2() *// // 内容:連想配列の入力が変わった *// //*==============================================// function change2() { // 連想配列 t3 = document.getElementById('tx3'); t4 = document.getElementById('tx4'); t4.value = b[t3.value]; // 未定義対策 if ( t4.value == "undefined" ) { t4.value = ""; } } //*==============================================// //* 関数:sort() *// // 内容:連想配列のソートしてみる *// //*==============================================// function sort() { // 連想配列 var i = 0; eigo = new Array(b.length); // キーをeigoに入れる for( key in b ) { eigo[i] = key; i++; } // ソートする eigo.sort(); // 表示する for(i = 0 ; i < eigo.length ; i++) { document.write(eigo[i] + ";" + b[eigo[i]] + "<BR>"); } } // --> </SCRIPT> </head> <body bgcolor="#FFFFCC"> 2次元配列<BR/> <input type=text id="tx1" value="" onChange="change1()"/> <input type=text id="tx2" value=""/><BR/> れんそうはいれつ<BR/> <input type=text id="tx3" value="" onChange="change2()"/> <input type=text id="tx4" value=""/><BR/> <input type="button" value="ソートしてみる" onClick="sort()" /> </body> </html> |
(上記< > ¥は、本当は半角)