首页 > 技术文章 > 函数组合

zhenjianyu 2020-09-02 17:29 原文

概括来说,就是接收若干个函数作为参数,返回一个新函数。新函数执行时,按照由右向左的顺序依次执行传入compose中的函数,每个函数的执行结果作为下一个函数的输入,直至最后一个函数的输出作为最终的输出结果。

组合

function compose(...fns){
    return function(rest){
        return fns.reduceRight(function(arg,fn){
            return fn(arg)
        },rest)
    }
}

管道 -> 与组合方向相反

function pipeline(...fns){
    return function(rest){
        return fns.reduce(function(arg,fn){
            return fn(arg)
        },rest)
    }
}

示例代码

function x(str){
    return str.toUpperCase()
}
function y(str){
    return str.split('')
}
function z(arr){
    return arr.join('-')
}
let fn = pipeline(x,y,z)
fn('zjy') //"Z-J-Y"

推荐阅读