zoukankan      html  css  js  c++  java
  • reduce要素与适用总结

    要素:

    1、高阶函数:reduce;

    2、处理函数:reducer;

    3、数据:可以是具体数据、签名相同的普通函数、签名相同的高阶函数;

    reduce(reducer, datas(data or funciton), initResult(optional))

    一、平凡数据处理

    1 In [5]: reduce(add, [1,2,3,4,5])   

    2 Out[5]: 15 

    1 In [6]: reduce(add, [1,2,3,4,5], 10)   

    2 Out[6]: 25 

    二、函数组作为数据、计算串联、函数输入与返回单一类型兼容;缩减结果为普通数值;

    reducer:(result, fn) => fn(result)

    function compose(...funcs) {

      return result => [...funcs]

        .reverse()

        .reduce((result, fn) => fn(result), result);

    }

    三、函数组作为数据、计算串联组合,缩减的结果任然是一个函数;函数组签名一致,且输出与输入匹配;

    funcs.reduce((a, b) => (...args) => a(b(...args)))

    function compose(...funcs) {

      return funcs

        .reverse()

        .reduce((fn1, fn2) => (...args) => fn2(fn1(...args)));

    }

    四、高阶函数组合,后面的函数作为前一高阶函数的参量输入,通过柯里化函数的局部赋值使函数组函数满足要求(next);

    ({ getState, dispatch }) => next => action

    给({ getState, dispatch }) => next => action签名的函数组分步赋值并进行串联的过程;

    整体上是dispatch的method swizzling;

    export default function applyMiddleware(...middlewares) {

      return (next)  =>

         (reducer, initialState) => {

            var store = next(reducer, initialState);

            var dispatch = store.dispatch;

            var chain = [];

    //构造初值

            var middlewareAPI = {

              getState: store.getState,

              dispatch: (action) => dispatch(action)

            };

    //给柯里化函数赋初值:next => action

            chain = middlewares.map(middleware => middleware(middlewareAPI));

    //next

            dispatch = compose(...chain, store.dispatch);

            return {

              ...store,

              dispatch

            };

       };

    }

  • 相关阅读:
    说说如何用js实现一个模板引擎
    JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)
    React之ref详细用法
    安装SQL Server提示“重叠的IO操作正在进行”解决
    HDU3746 Cyclic Nacklace 【KMP】
    读<大数据日知录:架构与算法>有感
    VMware虚拟机安装Linux英文改中文系统并更新yum安装输入法
    数据结构的基本概念
    MFC TreeCtrl 控件(一):简单使用
    Java生成word文档
  • 原文地址:https://www.cnblogs.com/feng9exe/p/11176169.html
Copyright © 2011-2022 走看看