最近在学习javascript的函数式编程,采用了ramda这个库。
我的需求是,把数组['1','2']中的每个数字字符串先加1,然后乘2,最后把数组链接成一个字符串,得到结果是‘46’。
我的解决方案是:
(说明下,这个例子比较简单,纯粹是为了了解函数式编程)
var input = ['1', '2'];
var multiple = R.curry((times, b) => parseInt(b) * times + '');
var add = R.curry((count, b) => parseInt(b) + count + '');
var concatArray = function(chars) {
return chars.reduce(function(a, b) {
return a.concat(b);
})
}
var func = R.pipe( add(1), multiple(2) );
var result = concatArray( R.map(func, input) );
console.log(result);
这种方案虽然是work的,但不是函数式的,因为var result = concatArray( R.map(func, input) );
这句,concatArray必须要等R.map执行完毕才能执行,也就是这句必须要维持一个中间的状态,但是函数式是不需要维护一个中间的状态的。
所以我想知道这里使用函数式来写的话,应该如何做?
谢谢大家。
先map,再map,再map,最后reduce。