实现一个 flowRight 的函数

分析flowRight的特点 :

  1. 会依次执行传入的函数, 并且顺序是从右往左 所以需要对参数 reverse
  2. 返回的结果是一个函数 , 并且这个函数需要对数据做处理,所以这个函数要传递进数据参数
  3. 传入的fn参数数量是不确定的 可以使用 args
  4. 每一项fn都需要执行,可以使用reduce
  1. // 实现一个 flowRight
  2. const myFlowRight = (...args)=>{
  3. return function(value){
  4. return args.reverse().reduce(function(result , fn){
  5. return fn(result)
  6. },value)
  7. }
  8. }
  9. // reduce 对数组的每一项进行处理,并且返回处理的累计结果
  10. // reduce 中 result 累计处理结果 ; fn 数组的每一项fn ; 第二个参数 value result的初始值
  11. const first = arr => arr[0] ;
  12. const reverse = arr => arr.reverse();
  13. const toUpper = str => str.toUpperCase();
  14. const fn = myFlowRight(toUpper , first, reverse)
  15. console.log(fn(['one','two','three']));
  16. // 使用箭头函数优化 myflowRight
  17. const myFlowRightArrow = (...args) => {
  18. return value => args.reverse().reduce((result , fn)=> fn(result),value)}
  19. }
  20. const fn2 = myFlowRightArrow(toUpper , first, reverse)
  21. console.log(fn2(['one','two','three']));