回答編集履歴
2
おまけ追加
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
オブジェクトになるじゃねーか!
|
6
6
|
|
7
|
-
なので[values](https://lodash.com/docs/4.17.15#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
ぷち修正
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
|
-
.
|
41
|
+
.values()
|
40
42
|
|
41
43
|
.value()
|
42
44
|
|