質問編集履歴

2

修正

2020/11/20 12:05

投稿

oika77
oika77

スコア184

test CHANGED
File without changes
test CHANGED
@@ -52,6 +52,20 @@
52
52
 
53
53
  コード
54
54
 
55
+ const resultArray = []; //配列を用意
56
+
57
+ const vocabPosition = [];//単語の座標(出現回数、平均評価)
58
+
59
+ const output_topic = document.getElementById('topik_box');
60
+
61
+ const output_review = document.getElementById("review_box");
62
+
63
+ const output_img = document.getElementById("img_contener");
64
+
65
+ var topicNum;
66
+
67
+
68
+
55
69
  function csvData(dataPath) {
56
70
 
57
71
  const request = new XMLHttpRequest(); // HTTPでファイルを読み込む

1

不備

2020/11/20 12:05

投稿

oika77
oika77

スコア184

test CHANGED
File without changes
test CHANGED
@@ -41,3 +41,157 @@
41
41
 
42
42
 
43
43
  この問題の解決方法として何かわかる方は教えていただけないでしょうか。よろしくお願いいたします。
44
+
45
+
46
+
47
+ ### ご指摘を受けて
48
+
49
+
50
+
51
+ ```javascript
52
+
53
+ コード
54
+
55
+ function csvData(dataPath) {
56
+
57
+ const request = new XMLHttpRequest(); // HTTPでファイルを読み込む
58
+
59
+ request.addEventListener('load', (event) => { // ロードさせ実行
60
+
61
+ const response = event.target.responseText; // 受け取ったテキストを返す
62
+
63
+ if (/^csv/result/.test(dataPath)) {//
64
+
65
+ loadTopic(response); //
66
+
67
+ }else if(/^csv/sumAveBag/.test(dataPath)){//
68
+
69
+ loadVocabPosition(response);
70
+
71
+ }
72
+
73
+ });
74
+
75
+ request.open('GET', dataPath, true); // csvのパスを指定
76
+
77
+ request.send();
78
+
79
+ }
80
+
81
+ //csvデータを配列に入れる
82
+
83
+ function loadVocabPosition(data){
84
+
85
+ const dataString = data.split('\n'); //改行で分割
86
+
87
+ for (let i = 1; i < dataString.length; i++) { //一番最初の行は飛ばす
88
+
89
+ vocabPosition[i] = dataString[i].split(',');
90
+
91
+ }
92
+
93
+ }
94
+
95
+ //csvデータを配列に入れる
96
+
97
+ function loadTopic(data){
98
+
99
+ const dataString = data.split('\n'); //改行で分割
100
+
101
+ for (let i = 1; i < dataString.length; i++) { //一番最初の行は飛ばす
102
+
103
+ resultArray[i] = dataString[i].split(',');
104
+
105
+ }
106
+
107
+ }
108
+
109
+
110
+
111
+ //配列の中身をHTMLで出力
112
+
113
+ function printVocab() {//トピックを表示する
114
+
115
+ let insertElement = ''; //テーブルタグに表示する用の変数
116
+
117
+ topicNum = resultArray[1].length/2;//トピック数
118
+
119
+ for (var i = 1; i <= topicNum; i++) {//
120
+
121
+ insertElement += "<div class=\"topic_contener\" id=\"topic_"+i+"\">"
122
+
123
+ insertElement += "<div class=\"topic_contener2\">"
124
+
125
+ insertElement += "<div class=\"attribute_contener\">";
126
+
127
+ for (var j = 1; j <= outputWordsNum; j++) {//一列目は飛ばす
128
+
129
+ insertElement += "<p id=\"atrVoc_"+i+"_"+j+"\">";
130
+
131
+ insertElement += `${resultArray[j][2*i-1]}`;//属性
132
+
133
+ insertElement += "</p>";
134
+
135
+ moveVocabPosition(resultArray[j][2*i-1],"atrVoc_"+i+"_"+j);
136
+
137
+ }
138
+
139
+ insertElement += "</div>";
140
+
141
+ insertElement += "<div class=\"evaluation_contener\">";
142
+
143
+ for (var j = 1; j <= outputWordsNum; j++) {//一列目は飛ばす
144
+
145
+ insertElement += "<p id=\"evaVoc_"+i+"_"+j+"\">";
146
+
147
+ insertElement += `${resultArray[j][2*i]}`;//評価
148
+
149
+ insertElement += "</p>";
150
+
151
+ moveVocabPosition(resultArray[j][2*i],"evaVoc_"+i+"_"+j);
152
+
153
+ }
154
+
155
+ insertElement += "</div>"
156
+
157
+ insertElement += "</div>";
158
+
159
+ insertElement += "</div>";
160
+
161
+ }
162
+
163
+ output_topic.innerHTML = insertElement; // 表示
164
+
165
+ }
166
+
167
+
168
+
169
+ function moveVocabPosition(voc,vocid){
170
+
171
+ var vocabID = vocabPosition[1].indexOf(voc);
172
+
173
+ var element = document.getElementById(vocid);
174
+
175
+ element.style.position = 'relative';
176
+
177
+ element.style.left = vocabPosition[vocabID,1]+'px';
178
+
179
+ element.style.top = vocabPosition[vocabID,2]+'px';
180
+
181
+ }
182
+
183
+
184
+
185
+ csvData('csv/sumAveBag.csv');
186
+
187
+ csvData('csv/resultBag.csv');
188
+
189
+ printVocab();
190
+
191
+
192
+
193
+ ```
194
+
195
+
196
+
197
+ 問題は```printVocab()```が配列に格納するより早く読み込んでしまうため、エラーには配列がNULLになってしまいます。