管道函数

管道函数简单的说就是执行一些函数,前一个函数的返回值作为下一个函数的参数以此类推,有些时候使用管道函数的思想可以帮我们简化代码。就像vue中的filter,其实就是利用管道函数的思想,使用管道符号‘|’分隔多个filter函数,前一个filter函数的返回值作为下一个filter函数的参数,最后所有filter函数执行完毕之后作为最终的过滤结果。

然后我也自己去尝试着写了一下管道函数的实现:

 function pipeFunc(...funcs) {
    return function (...args) {
        return funcs.reduce((red, func) => {    
            return Array.isArray(red) ? func(...red) : func(red); 
        }, args);
    }
 }


 function fn1 (a, b) {
    return a + b;
 }
 function fn2 (a) {
    return a * 2;
 }
 function fn3 (a) {
     return a * 3;
 }
 
 console.log( pipeFunc(fn1, fn2, fn3)(1, 2) ); // 18

通过js数组的reduce方法可以比较方便的实现管道函数,但是好像存在一个问题,就是当我们需要除了第一个函数可以传多个参数,之后的函数也可以传多个参数的时候就不太适合使用管道函数了

下面是使用es6的箭头函数简化之后的函数:

 const pipiFunc = (...funcs) => (...args) => Array.isArray(red) ? func(...red) : func(red); 

使用箭头函数还是很香的,一行就解决了函数的实现,不过使用箭头函数的话可读性就没有那么好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值