回答編集履歴

1

関数にしてみた。

2015/12/01 10:31

投稿

raccy
raccy

スコア21735

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
+ ```