回答編集履歴
1
関数にしてみた。
test
CHANGED
@@ -4,17 +4,7 @@
|
|
4
4
|
|
5
5
|
var R = require("ramda");
|
6
6
|
|
7
|
-
var data = [
|
8
|
-
|
9
|
-
["a",10],
|
10
|
-
|
11
|
-
["b",20],
|
12
|
-
|
13
|
-
["c",30],
|
14
|
-
|
15
|
-
["a",40],
|
16
|
-
|
17
|
-
["a",50]];
|
7
|
+
var data = [["a",10],["b",20],["c",30],["a",40],["a",50]];
|
18
8
|
|
19
9
|
var result = R.toPairs(R.map(R.pipe(R.map(R.last), R.sum), R.groupBy(R.head, data)));
|
20
10
|
|
@@ -23,3 +13,21 @@
|
|
23
13
|
```
|
24
14
|
|
25
15
|
関数型プログラミングは難しいです。もうちょっとすっきり書ける方法があるような気がします。
|
16
|
+
|
17
|
+
---
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
さらに関数型プログラミングっぽくしてみました。関数にしたから、再利用も可能です。
|
22
|
+
|
23
|
+
```JavaScript
|
24
|
+
|
25
|
+
var R = require("ramda");
|
26
|
+
|
27
|
+
var data = [["a",10],["b",20],["c",30],["a",40],["a",50]];
|
28
|
+
|
29
|
+
var mapSum = R.pipe(R.groupBy(R.head), R.map(R.pipe(R.map(R.last), R.sum)), R.toPairs);
|
30
|
+
|
31
|
+
console.log(mapSum(data)); // => [ [ 'a', 100 ], [ 'b', 20 ], [ 'c', 30 ] ]
|
32
|
+
|
33
|
+
```
|