teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

関数にしてみた。

2015/12/01 10:31

投稿

raccy
raccy

スコア21767

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
- ["a",50]];
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
+ ```