javascript 函数式编程遇到的问题,求解答?
高洛峰
高洛峰 2017-04-11 11:55:07
[JavaScript讨论组]

最近在学习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)
PHPz

先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("")
    );
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号