回答編集履歴
2
おまけ追加
answer
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
Lodashに[groupBy](https://lodash.com/docs/4.17.11#groupBy)があるので瞬殺です。
|
2
2
|
|
3
3
|
オブジェクトになるじゃねーか!
|
4
|
-
なので[values](https://lodash.com/docs/4.17.15#values)
|
4
|
+
なので[values](https://lodash.com/docs/4.17.15#values)と組み合わせましょうね。
|
5
5
|
|
6
6
|
[Online Lodash Tester](https://codepen.io/travist/full/jrBjBz/)で調べてみましょう。
|
7
7
|
ついでに[チェーン記法](https://qiita.com/kurararara/items/fb470ea71e59cd0371d4)を使ってかっこよく仕上げます。
|
8
8
|
|
9
9
|
```js
|
10
|
-
const _ = require('lodash');
|
11
10
|
const data = [
|
12
11
|
{fruit: 'apple', price: 100},
|
13
12
|
{fruit: 'orange', price: 120},
|
@@ -51,4 +50,65 @@
|
|
51
50
|
}
|
52
51
|
]
|
53
52
|
]
|
53
|
+
```
|
54
|
+
|
55
|
+
---
|
56
|
+
|
57
|
+
【おまけ】 ネイティブJSで頑張る
|
58
|
+
|
59
|
+
ネイティブJSにはgroupByなどという軟弱なものはありませんので、
|
60
|
+
reduceでチクチク実装する必要があります。
|
61
|
+
|
62
|
+
ネイティブJSにもES2017という比較的新しい機能として[Object.values](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values)実装されていますので、
|
63
|
+
一度オブジェクトを経由するのが分かりやすいですね。
|
64
|
+
|
65
|
+
```js
|
66
|
+
const data = [
|
67
|
+
{fruit: 'apple', price: 100},
|
68
|
+
{fruit: 'orange', price: 120},
|
69
|
+
{fruit: 'apple', price: 200},
|
70
|
+
{fruit: 'orange', price: 130},
|
71
|
+
{fruit: 'apple', price: 140},
|
72
|
+
];
|
73
|
+
|
74
|
+
const result = Object.values(
|
75
|
+
data.reduce((obj, it) => {
|
76
|
+
if (!obj[it.fruit]) obj[it.fruit] = [];
|
77
|
+
obj[it.fruit].push(it);
|
78
|
+
return obj;
|
79
|
+
}, {})
|
80
|
+
);
|
81
|
+
|
82
|
+
console.log(JSON.stringify(result, null, 2));
|
83
|
+
```
|
84
|
+
|
85
|
+
結果
|
86
|
+
|
87
|
+
```json
|
88
|
+
[
|
89
|
+
[
|
90
|
+
{
|
91
|
+
"fruit": "apple",
|
92
|
+
"price": 100
|
93
|
+
},
|
94
|
+
{
|
95
|
+
"fruit": "apple",
|
96
|
+
"price": 200
|
97
|
+
},
|
98
|
+
{
|
99
|
+
"fruit": "apple",
|
100
|
+
"price": 140
|
101
|
+
}
|
102
|
+
],
|
103
|
+
[
|
104
|
+
{
|
105
|
+
"fruit": "orange",
|
106
|
+
"price": 120
|
107
|
+
},
|
108
|
+
{
|
109
|
+
"fruit": "orange",
|
110
|
+
"price": 130
|
111
|
+
}
|
112
|
+
]
|
113
|
+
]
|
54
114
|
```
|
1
ぷち修正
answer
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
Lodashに[groupBy](https://lodash.com/docs/4.17.11#groupBy)があるので瞬殺です。
|
2
2
|
|
3
3
|
オブジェクトになるじゃねーか!
|
4
|
-
なので[Object.values](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values)と組み合わせましょうね。
|
4
|
+
なので[values](https://lodash.com/docs/4.17.15#values)や[Object.values](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values)と組み合わせましょうね。
|
5
5
|
|
6
6
|
[Online Lodash Tester](https://codepen.io/travist/full/jrBjBz/)で調べてみましょう。
|
7
|
+
ついでに[チェーン記法](https://qiita.com/kurararara/items/fb470ea71e59cd0371d4)を使ってかっこよく仕上げます。
|
7
8
|
|
8
9
|
```js
|
9
10
|
const _ = require('lodash');
|
@@ -17,7 +18,7 @@
|
|
17
18
|
|
18
19
|
result = _(data)
|
19
20
|
.groupBy(it => it.fruit)
|
20
|
-
.
|
21
|
+
.values()
|
21
22
|
.value()
|
22
23
|
```
|
23
24
|
|