質問編集履歴

2

evalの部分の誤字を訂正。エラーメッセージを訂正

2017/07/27 05:19

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  ```
20
20
 
21
- jquery-3.2.1.js:3869 Uncaught SyntaxError: Unexpected identifier
21
+ jquery-3.2.1.js:3869 Uncaught SyntaxError: Unexpected token ;
22
22
 
23
23
  ```
24
24
 
@@ -290,7 +290,7 @@
290
290
 
291
291
 
292
292
 
293
- eval($after + '=' + $foods + ';');
293
+ eval($after + '=' + $groups + ';');
294
294
 
295
295
 
296
296
 

1

自分で書いてみたソースを追記

2017/07/27 05:18

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -9,3 +9,347 @@
9
9
  しかしPHPでのやり方は載っていたのですが、javascriptのやり方がわかりません。
10
10
 
11
11
  お力添えよろしくお願いいたします。
12
+
13
+
14
+
15
+ ###発生している問題・エラーメッセージ
16
+
17
+
18
+
19
+ ```
20
+
21
+ jquery-3.2.1.js:3869 Uncaught SyntaxError: Unexpected identifier
22
+
23
+ ```
24
+
25
+
26
+
27
+ ###該当のソースコード
28
+
29
+ ```ここに言語を入力
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+ <script
38
+
39
+ src="https://code.jquery.com/jquery-3.2.1.js"
40
+
41
+ integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE="
42
+
43
+ crossorigin="anonymous"></script>
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+ <script type="text/javascript">
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+ $(function(){
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ /**
80
+
81
+ 連想配列を文字列に整形してコンソールに表示
82
+
83
+ * @method console.hash
84
+
85
+ * @param {hash} obj 処理対象のオブジェクト
86
+
87
+ * @method format 連想配列を文字列に整形
88
+
89
+ * @property {number} length オブジェクト全体の数
90
+
91
+ * @property {number} count 整形処理をの終わったオブジェクト数
92
+
93
+ * @property {string} outText コンソールに書き出すテキスト
94
+
95
+ */
96
+
97
+ console.hash = function(obj) {
98
+
99
+ this.length = Object.keys(obj).length;
100
+
101
+ this.count = 0;
102
+
103
+ this.outText = "{\n";
104
+
105
+ /**
106
+
107
+ * @param {hash} obj 処理対象のオブジェクト
108
+
109
+ * @param {number} times 処理中オブジェクトの階層
110
+
111
+ */
112
+
113
+ this.format = function(obj,times){
114
+
115
+ var i = 0;
116
+
117
+ var _objlength = Object.keys(obj).length;
118
+
119
+ for(key in obj){
120
+
121
+ i++;
122
+
123
+ //階層分のタブを追加
124
+
125
+ var tabs = "";
126
+
127
+ for(var j = 0; j < times+1; j++){
128
+
129
+ tabs += "\t";
130
+
131
+ }
132
+
133
+ this.outText += tabs + key + ":";
134
+
135
+ if(typeof obj[key] == "object"){
136
+
137
+ this.outText += "{" + "\n";
138
+
139
+ //下層のオブジェクト数を足す
140
+
141
+ this.length += Object.keys(obj[key]).length;
142
+
143
+ //再帰処理
144
+
145
+ this.format(obj[key],times+1);
146
+
147
+ if(i == _objlength){
148
+
149
+ this.outText += tabs.replace(/(\t?).$/,'$1') + "}\n";
150
+
151
+ }
152
+
153
+ this.count++;
154
+
155
+ }else{
156
+
157
+ this.outText += obj[key];
158
+
159
+ if(i != _objlength){
160
+
161
+ this.outText += ",\n";
162
+
163
+ }else{
164
+
165
+ this.outText += "\n" + tabs.replace(/(\t?).$/,'$1') + "}\n";
166
+
167
+ }
168
+
169
+ this.count++;
170
+
171
+ }
172
+
173
+ }
174
+
175
+ if(this.length == this.count){
176
+
177
+ console.log(this.outText);
178
+
179
+ }
180
+
181
+ }
182
+
183
+ this.format(obj,0);
184
+
185
+ }
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+ function array_key_exists ( key, search ) {
200
+
201
+ // http://kevin.vanzonneveld.net
202
+
203
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
204
+
205
+ // + improved by: Felix Geisendoerfer (http://www.debuggable.com/felix)
206
+
207
+ // * example 1: array_key_exists('kevin', {'kevin': 'van Zonneveld'});
208
+
209
+ // * returns 1: true
210
+
211
+
212
+
213
+ // input sanitation
214
+
215
+ if( !search || (search.constructor !== Array && search.constructor !== Object) ){
216
+
217
+ return false;
218
+
219
+ }
220
+
221
+
222
+
223
+ return key in search;
224
+
225
+ }
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+ var $foods = [
236
+
237
+ {'name':'Apple', 'category':'fruits'},
238
+
239
+ {'name':'Strawberry', 'category':'fruits'},
240
+
241
+ {'name':'Tomato', 'category':'vegetables'},
242
+
243
+ {'name':'Carot', 'category':'vegetables'},
244
+
245
+ {'name':'water', 'category':'drink'},
246
+
247
+ {'name':'beer', 'category':'drink'},
248
+
249
+ ];
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+ function array_group_by($items, $keyName, $after){
266
+
267
+
268
+
269
+ var $groups = [''];
270
+
271
+
272
+
273
+
274
+
275
+ for(var $item in $items){
276
+
277
+ var $key = $item[$keyName];
278
+
279
+ if (array_key_exists($key, $groups)) {
280
+
281
+ $groups[$key][''] = $item;
282
+
283
+ } else {
284
+
285
+ $groups[$key] = [$item];
286
+
287
+ }
288
+
289
+ }
290
+
291
+
292
+
293
+ eval($after + '=' + $foods + ';');
294
+
295
+
296
+
297
+
298
+
299
+ }
300
+
301
+
302
+
303
+
304
+
305
+ array_group_by($foods, 'category', '$foods2');
306
+
307
+
308
+
309
+
310
+
311
+ console.hash($foods);
312
+
313
+ console.hash($foods2);
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+ });
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+ </script>
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+ ```
344
+
345
+
346
+
347
+ ###試したこと
348
+
349
+ 課題に対してアプローチしたことを記載してください
350
+
351
+
352
+
353
+ ###補足情報(言語/FW/ツール等のバージョンなど)
354
+
355
+ より詳細な情報