質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1481閲覧

配列の中身について

gik

総合スコア152

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/12/28 17:21

編集2015/12/28 18:01

javascript

1<html> 2<head> 3<script type="text/javascript"> 4<!-- 5 6function getStringById(id) { 7 var element = document.getElementById(id); 8 var str = element.value; 9 if (str == undefined) { 10 str = element.innerHTML; 11 } 12 return (str == undefined) ? "" : str; 13} 14 15Array.prototype.contains = function(value) { 16 for (var i = 0; i < this.length; i++) { 17 if (this[i] == value) { return true; } 18 } 19 return false; 20} 21 22var shouhin = [ 23 "にんじん", "じゃがいも", "だいこん", 24 "たまご", "牛乳", "チーズ", 25 "砂糖", "塩", "酢", "しょうゆ", "味噌" 26]; 27 28 29var data = [ 30 [0,2,3,5,9], 31 [1,2,9,10], 32 [0,4,5,8], 33 [1,3,4,7], 34 [1,0,4,5,8], 35 [1,6,7,9], 36 [3,5], 37 [3,4,7], 38 [1,2,7], 39 [4,5,9,10], 40 [2,6,9], 41 [3,4,5], 42 [1,7,10] 43]; 44 45window.onload = function() { 46 var table_html = '<table class="buy_table">'; 47 table_html += "<tr>"; 48 for (var i = 0; i < shouhin.length; i++) { 49 table_html += "<th>" + shouhin[i] + "</th>"; 50 } 51 table_html += "</tr>"; 52 for (var i = 0; i < data.length; i++) { 53 table_html += "<tr>"; 54 var shouhin_id = data[i]; 55 for (var j = 0; j < shouhin.length; j++) { 56 var buy = (shouhin_id.contains(j) ? "○" : " "); 57 table_html += "<td>" + buy + "</td>"; 58 } 59 table_html += "</tr>"; 60 } 61 table_html += "</table>"; 62 document.getElementById('buy_table').innerHTML = table_html; 63 64 var shouhin_select = document.getElementById('shouhin_select'); 65 for (var i = 0; i < shouhin.length; i++) { 66 var option = new Option(shouhin[i]) 67 shouhin_select.options[i] = option; 68 } 69 70} 71 72 73function execRecommendation() { 74 var shouhin_select = document.getElementById('shouhin_select'); 75 var shouhin_select_id = shouhin_select.selectedIndex; 76 77 var relation = new Array(shouhin.length); 78 for (var i = 0; i<relation.length; i++) { 79 relation[i] = 0; 80 } 81 82 for (var i = 0; i < data.length; i++) { 83 var shouhin_id = data[i]; 84 if (!shouhin_id.contains(shouhin_select_id)) { continue; } 85 for (var j = 0; j < shouhin_id.length; j++) { 86 if (shouhin_select_id == shouhin_id[j]) { continue; } 87 relation[shouhin_id[j]]++; **ここの配列はなにをしているのですか?** 88 } 89 } 90 91 var max_shouhin_id = 0; 92 var max_value = 0; 93 for (var i = 0; i < relation.length; i++) { 94 if (max_value < relation[i]) { **ここの配列の中身は?**** 95 max_shouhin_id = i; 96 max_value = relation[i]; 97 } 98 } 99 100 var recommend = document.getElementById('recommend'); 101 recommend.innerHTML = "おすすめ:" + shouhin[max_shouhin_id]; 102} 103 104//--> 105</script> 106<style type="text/css"> 107<!-- 108table.buy_table th { border:#000000 1px solid; text-align:center} 109table.buy_table td { border:#000000 1px solid; text-align:center} 110//> 111</style> 112 113</head> 114 115<body> 116 購入履歴 117 <div id="buy_table"></div> 118 <select id="shouhin_select"></select> 119 <input value="購入" type="button" onClick="execRecommendation()"></input><br><br> 120 <div id="recommend"></div> 121 122</body> 123</html>

すいません。部分部分の配列の中身がわからなくて質問しました。
教えてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

これは、学校の宿題でしょうか?
であれば、ヒントレベルにしたいと思います

まず、このプログラムがどのような仕様なのかを、はっきりさせましょう

おそらくですが、「コンボボックスで選択した商品について、過去の購買履歴からその商品と同時に購入している商品の中で、最も購入回数の多いものを『おすすめ』として表示する」というのが、このプログラムの仕様だと思います
この仕様であっているのであれば、relationで定義される配列が、何を集計しているのかは想像がつくと思います

投稿2015/12/29 00:19

KatsumiTanaka

総合スコア924

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まず最初にrelationはshohinという配列と同じサイズのすべての要素が0の配列です。

javascript

1var relation = new Array(shouhin.length); //shohinという配列と同じサイズの配列を作成 2for (var i = 0; i<relation.length; i++) { 3 relation[i] = 0; //relationの要素をすべて0で初期化 4}

その後、dataという2次元配列を検索し、選択されている商品以外のインデックスのrelation配列に1を足しています。

javascript

1for (var i = 0; i < data.length; i++) { 2 var shouhin_id = data[i]; //data配列から配列を取り出し 3 if (!shouhin_id.contains(shouhin_select_id)) { continue; } //取り出した配列に選択した商品のインデックスが無かったら、ループを回す 4 for (var j = 0; j < shouhin_id.length; j++) { //取り出した配列を検索 5 if (shouhin_select_id == shouhin_id[j]) { continue; } //選択した商品のインデックスと同じ場合にはループを回す 6 relation[shouhin_id[j]]++; //選択した商品のインデックス以外のrelationに1を足す 7 //shohin_id[j]は配列の要素 例えば 8 //shohin_id = [0,2,3,5,9] で j=1 なら 9 //shohin_id[j] = 2 10 //relation は数値の配列 初期はすべて0 11 } 12}

そして、最後にrelationの配列の中で最も大きい値を検索しています。

javascript

1var max_shouhin_id = 0; 2var max_value = 0; 3for (var i = 0; i < relation.length; i++) { //relation配列を検索 4 if (max_value < relation[i]) { //relationは数値の配列 5 //例えば 最初の検索をした結果 6 //relation = [2, 3, 7, 9, 10, 4, 6, 8, 8, 10, 1] となったりする 7 max_shouhin_id = i; //最大値となっている商品のインデックスを取得 8 max_value = relation[i]; //最大値を取得 9 } 10}

全体を見てみると、購入した商品と最も関連がある商品を検索し、表示するものようです。

投稿2015/12/29 00:19

orange0190

総合スコア1698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gik

2015/12/29 05:17

ありがとうございます。 わかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問