文字列を検索する
購入可能リストの物品名には、その種類がわかる「陶磁器」、「時計」・・・の文言があります。これを利用して得意先の希望品を抽出します。第3回 文字列操作 文字を検索が使えそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
var item = [ "江戸時代の小判が入っている陶磁器:290000", "マンモスの化石:2000", "明治時代の陶磁器:3000", "チンギス・ハンが愛用した硯:500000", "平成時代の陶磁器:1400", "鎌倉時代の古ぼけた絵画:24000", "デジタル式時計:1250", "安土桃山時代信長作の絵画:780000", "奈良時代の仏像の絵画:30000", "平安時代のきらびやかな陶磁器:14000", "平成時代の美咲さんが書いた絵画:10", "日時計:48000", "弥生時代の陶磁器:2000000", "江戸時代の歯車式時計:12000", "水時計:8800", "義経の刀:5000", "昭和時代の陶磁器:2400", "不発弾:-10000" ]; |
プログラムを作成しテストを行ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<meta charset="UTF-8"> <script type="text/javascript"> var item = [ "江戸時代の小判が入っている陶磁器:290000", "マンモスの化石:2000", "明治時代の陶磁器:3000", "チンギス・ハンが愛用した硯:500000", "平成時代の陶磁器:1400", "鎌倉時代の古ぼけた絵画:24000", "デジタル式時計:1250", "安土桃山時代信長作の絵画:780000", "奈良時代の仏像の絵画:30000", "平安時代のきらびやかな陶磁器:14000", "平成時代の美咲さんが書いた絵画:10", "日時計:48000", "弥生時代の陶磁器:2000000", "江戸時代の歯車式時計:12000", "水時計:8800", "義経の刀:5000", "昭和時代の陶磁器:2400", "不発弾:-10000" ]; //得意先毎の情報 var namae = ["得意先A","得意先B","得意先C"]; var kibou = ["陶磁器","絵画","時計"]; var mony = [1000000,800000,300000]; //得意先毎の購入可能リスト var list = [[],[],[]]; //list[0][1],list[0][2]・・・得意先A //list[1][1],list[2][2]・・・得意先B //list[2][1],list[2][2]・・・得意先C //テスト extraction(); for(var i=0;i<list.length;i=i+1){ document.write("【"+namae[i]+"】"+"<BR>"); for(var j=0;j<list[i].length;j=j+1){ document.write(list[i][j]+"<BR>"); } } /* 得意先毎の購入可能リスト作成 */ function extraction(){ var index = [0,0,0];//得意先毎購入リストの配列用番号 for(var i=0;i<item.length;i=i+1){ //購入リスト分ループ for(var j=0;j<kibou.length;j=j+1){ //得意先希望分ループ var serch = item[i].indexOf(kibou[j]); if( serch != -1){ //希望品の文言あり list[j][index[j]] = item[i]; index[j] = index[j] + 1; } } } } </script> |
テストの実行結果です。
ポイント
このプログラムのポイントは得意先毎の購入可能リストを二次元配列で表現しているところです。
32 |
var list = [[],[],[]]; |
list[0][X]には、得意先Aの購入可能情報が格納されます。list[1][X]には得意先B、list[2][X]には得意先Cの購入可能情報が格納されます。
二次元配列ではなく、各顧客毎に配列を作成しても実現できます。しかし、各顧客毎の配列へ情報を格納する際に判断する必要がでてきます。
二次元配列にすると判断する必要がなく、54行目の1文で記述することができます。
54 |
list[j][index[j]] = item[i]; |
これは顧客の希望分ループしている間に、そのループのカウンタ(j)を利用して、二次元配列のlist[j][index[j]]としています。これで二次元配列の得意先を指定することができます。また、list[j][index[j]]の部分は、顧客毎のリストの番号(列)を配列化することによりカウンター(j)の利用を可能にしています。
49 |
var index = [0,0,0]; |