teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

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

2017/07/27 05:19

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,7 @@
8
8
  ###発生している問題・エラーメッセージ
9
9
 
10
10
  ```
11
- jquery-3.2.1.js:3869 Uncaught SyntaxError: Unexpected identifier
11
+ jquery-3.2.1.js:3869 Uncaught SyntaxError: Unexpected token ;
12
12
  ```
13
13
 
14
14
  ###該当のソースコード
@@ -144,7 +144,7 @@
144
144
  }
145
145
  }
146
146
 
147
- eval($after + '=' + $foods + ';');
147
+ eval($after + '=' + $groups + ';');
148
148
 
149
149
 
150
150
  }

1

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

2017/07/27 05:18

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -3,4 +3,176 @@
3
3
  http://qiita.com/suin/items/c524cf84368332db426b
4
4
  上記サイトの実装案1が気に入りました。
5
5
  しかしPHPでのやり方は載っていたのですが、javascriptのやり方がわかりません。
6
- お力添えよろしくお願いいたします。
6
+ お力添えよろしくお願いいたします。
7
+
8
+ ###発生している問題・エラーメッセージ
9
+
10
+ ```
11
+ jquery-3.2.1.js:3869 Uncaught SyntaxError: Unexpected identifier
12
+ ```
13
+
14
+ ###該当のソースコード
15
+ ```ここに言語を入力
16
+
17
+
18
+
19
+ <script
20
+ src="https://code.jquery.com/jquery-3.2.1.js"
21
+ integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE="
22
+ crossorigin="anonymous"></script>
23
+
24
+
25
+
26
+
27
+ <script type="text/javascript">
28
+
29
+
30
+
31
+
32
+ $(function(){
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+ /**
41
+ 連想配列を文字列に整形してコンソールに表示
42
+ * @method console.hash
43
+ * @param {hash} obj 処理対象のオブジェクト
44
+ * @method format 連想配列を文字列に整形
45
+ * @property {number} length オブジェクト全体の数
46
+ * @property {number} count 整形処理をの終わったオブジェクト数
47
+ * @property {string} outText コンソールに書き出すテキスト
48
+ */
49
+ console.hash = function(obj) {
50
+ this.length = Object.keys(obj).length;
51
+ this.count = 0;
52
+ this.outText = "{\n";
53
+ /**
54
+ * @param {hash} obj 処理対象のオブジェクト
55
+ * @param {number} times 処理中オブジェクトの階層
56
+ */
57
+ this.format = function(obj,times){
58
+ var i = 0;
59
+ var _objlength = Object.keys(obj).length;
60
+ for(key in obj){
61
+ i++;
62
+ //階層分のタブを追加
63
+ var tabs = "";
64
+ for(var j = 0; j < times+1; j++){
65
+ tabs += "\t";
66
+ }
67
+ this.outText += tabs + key + ":";
68
+ if(typeof obj[key] == "object"){
69
+ this.outText += "{" + "\n";
70
+ //下層のオブジェクト数を足す
71
+ this.length += Object.keys(obj[key]).length;
72
+ //再帰処理
73
+ this.format(obj[key],times+1);
74
+ if(i == _objlength){
75
+ this.outText += tabs.replace(/(\t?).$/,'$1') + "}\n";
76
+ }
77
+ this.count++;
78
+ }else{
79
+ this.outText += obj[key];
80
+ if(i != _objlength){
81
+ this.outText += ",\n";
82
+ }else{
83
+ this.outText += "\n" + tabs.replace(/(\t?).$/,'$1') + "}\n";
84
+ }
85
+ this.count++;
86
+ }
87
+ }
88
+ if(this.length == this.count){
89
+ console.log(this.outText);
90
+ }
91
+ }
92
+ this.format(obj,0);
93
+ }
94
+
95
+
96
+
97
+
98
+
99
+
100
+ function array_key_exists ( key, search ) {
101
+ // http://kevin.vanzonneveld.net
102
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
103
+ // + improved by: Felix Geisendoerfer (http://www.debuggable.com/felix)
104
+ // * example 1: array_key_exists('kevin', {'kevin': 'van Zonneveld'});
105
+ // * returns 1: true
106
+
107
+ // input sanitation
108
+ if( !search || (search.constructor !== Array && search.constructor !== Object) ){
109
+ return false;
110
+ }
111
+
112
+ return key in search;
113
+ }
114
+
115
+
116
+
117
+
118
+ var $foods = [
119
+ {'name':'Apple', 'category':'fruits'},
120
+ {'name':'Strawberry', 'category':'fruits'},
121
+ {'name':'Tomato', 'category':'vegetables'},
122
+ {'name':'Carot', 'category':'vegetables'},
123
+ {'name':'water', 'category':'drink'},
124
+ {'name':'beer', 'category':'drink'},
125
+ ];
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+ function array_group_by($items, $keyName, $after){
134
+
135
+ var $groups = [''];
136
+
137
+
138
+ for(var $item in $items){
139
+ var $key = $item[$keyName];
140
+ if (array_key_exists($key, $groups)) {
141
+ $groups[$key][''] = $item;
142
+ } else {
143
+ $groups[$key] = [$item];
144
+ }
145
+ }
146
+
147
+ eval($after + '=' + $foods + ';');
148
+
149
+
150
+ }
151
+
152
+
153
+ array_group_by($foods, 'category', '$foods2');
154
+
155
+
156
+ console.hash($foods);
157
+ console.hash($foods2);
158
+
159
+
160
+
161
+
162
+ });
163
+
164
+
165
+
166
+
167
+ </script>
168
+
169
+
170
+
171
+
172
+ ```
173
+
174
+ ###試したこと
175
+ 課題に対してアプローチしたことを記載してください
176
+
177
+ ###補足情報(言語/FW/ツール等のバージョンなど)
178
+ より詳細な情報