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