回答編集履歴

2

おまけ追加

2020/02/27 10:22

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  オブジェクトになるじゃねーか!
6
6
 
7
- なので[values](https://lodash.com/docs/4.17.15#values)や[Object.values](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values)と組み合わせましょうね。
7
+ なので[values](https://lodash.com/docs/4.17.15#values)と組み合わせましょうね。
8
8
 
9
9
 
10
10
 
@@ -16,8 +16,6 @@
16
16
 
17
17
  ```js
18
18
 
19
- const _ = require('lodash');
20
-
21
19
  const data = [
22
20
 
23
21
  {fruit: 'apple', price: 100},
@@ -105,3 +103,125 @@
105
103
  ]
106
104
 
107
105
  ```
106
+
107
+
108
+
109
+ ---
110
+
111
+
112
+
113
+ 【おまけ】 ネイティブJSで頑張る
114
+
115
+
116
+
117
+ ネイティブJSにはgroupByなどという軟弱なものはありませんので、
118
+
119
+ reduceでチクチク実装する必要があります。
120
+
121
+
122
+
123
+ ネイティブJSにもES2017という比較的新しい機能として[Object.values](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values)実装されていますので、
124
+
125
+ 一度オブジェクトを経由するのが分かりやすいですね。
126
+
127
+
128
+
129
+ ```js
130
+
131
+ const data = [
132
+
133
+ {fruit: 'apple', price: 100},
134
+
135
+ {fruit: 'orange', price: 120},
136
+
137
+ {fruit: 'apple', price: 200},
138
+
139
+ {fruit: 'orange', price: 130},
140
+
141
+ {fruit: 'apple', price: 140},
142
+
143
+ ];
144
+
145
+
146
+
147
+ const result = Object.values(
148
+
149
+ data.reduce((obj, it) => {
150
+
151
+ if (!obj[it.fruit]) obj[it.fruit] = [];
152
+
153
+ obj[it.fruit].push(it);
154
+
155
+ return obj;
156
+
157
+ }, {})
158
+
159
+ );
160
+
161
+
162
+
163
+ console.log(JSON.stringify(result, null, 2));
164
+
165
+ ```
166
+
167
+
168
+
169
+ 結果
170
+
171
+
172
+
173
+ ```json
174
+
175
+ [
176
+
177
+ [
178
+
179
+ {
180
+
181
+ "fruit": "apple",
182
+
183
+ "price": 100
184
+
185
+ },
186
+
187
+ {
188
+
189
+ "fruit": "apple",
190
+
191
+ "price": 200
192
+
193
+ },
194
+
195
+ {
196
+
197
+ "fruit": "apple",
198
+
199
+ "price": 140
200
+
201
+ }
202
+
203
+ ],
204
+
205
+ [
206
+
207
+ {
208
+
209
+ "fruit": "orange",
210
+
211
+ "price": 120
212
+
213
+ },
214
+
215
+ {
216
+
217
+ "fruit": "orange",
218
+
219
+ "price": 130
220
+
221
+ }
222
+
223
+ ]
224
+
225
+ ]
226
+
227
+ ```

1

ぷち修正

2020/02/27 10:22

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -4,11 +4,13 @@
4
4
 
5
5
  オブジェクトになるじゃねーか!
6
6
 
7
- なので[Object.values](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values)と組み合わせましょうね。
7
+ なので[values](https://lodash.com/docs/4.17.15#values)や[Object.values](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values)と組み合わせましょうね。
8
8
 
9
9
 
10
10
 
11
11
  [Online Lodash Tester](https://codepen.io/travist/full/jrBjBz/)で調べてみましょう。
12
+
13
+ ついでに[チェーン記法](https://qiita.com/kurararara/items/fb470ea71e59cd0371d4)を使ってかっこよく仕上げます。
12
14
 
13
15
 
14
16
 
@@ -36,7 +38,7 @@
36
38
 
37
39
  .groupBy(it => it.fruit)
38
40
 
39
- .thru(Object.values)
41
+ .values()
40
42
 
41
43
  .value()
42
44