javascript 函数式编程遇到的问题,求解答?
高洛峰
高洛峰 2017-04-11 11:55:07
0
2
343

最近在学习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执行完毕才能执行,也就是这句必须要维持一个中间的状态,但是函数式是不需要维护一个中间的状态的。

所以我想知道这里使用函数式来写的话,应该如何做?

谢谢大家。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(2)
PHPzhong

先map,再map,再map,最后reduce。

小葫芦

不会 ramda
用纯 js 写了

var input = ["1","2"];

Array.prototype.add = function(x){
    return this.map(function(e){
        return +e+x;
    });
};

Array.prototype.multiple = function(x){
    return this.map(function(e){
        return +e*x;
    });
};

//计算
console.log(
    input
    .add(1)
    .multiple(2)
    .join("")
    );
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!