要素:

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

};

};

}

reduce要素与适用总结的更多相关文章

  1. Map/Reduce个人实战--生成数据测试集

    背景: 在大数据领域, 由于各方面的原因. 有时需要自己来生成测试数据集, 由于测试数据集较大, 因此采用Map/Reduce的方式去生成. 在这小编(mumuxinfei)结合自身的一些实战经历, ...

  2. 小白学习之pytorch框架(3)-模型训练三要素+torch.nn.Linear()

    模型训练的三要素:数据处理.损失函数.优化算法    数据处理(模块torch.utils.data) 从线性回归的的简洁实现-初始化模型参数(模块torch.nn.init)开始 from torc ...

  3. JS的内建函数reduce

    @(js) reduce函数,是ECMAScript5规范中出现的数组方法.在平时的工作中,相信大家使用的场景并不多,一般而言,可以通过reduce方法实现的逻辑都可以通过forEach方法来变相的实 ...

  4. 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...

  5. MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程

    在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...

  6. MapReduce剖析笔记之五:Map与Reduce任务分配过程

    在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...

  7. MapReduce剖析笔记之三:Job的Map/Reduce Task初始化

    上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...

  8. JavaScript - reduce方法,reduceRight方法 (Array)

    JavaScript - reduce方法 (Array) 解释:reduce() 方法接收一个函数作为累加器(accumulator),数组 中的每个值(从左到右)开始合并,最终为一个值. 语法:a ...

  9. JavaScript数组方法reduce解析

    Array.prototype.reduce() 概述 reduce()方法是数组的一个实例方法(共有方法),可以被数组的实例对象调用.reduce() 方法接收一个函数作为累加器(accumulat ...

随机推荐

  1. PHP生成正则表达式的类

    正则表达式,写起来还是比较费劲的,于是封装个类,初稿,抛砖引玉. 关于正则,建议参考 https://github.com/CyC2018/CS-Notes/blob/master/notes/%E6 ...

  2. [转帖]知新之--12-factors

    知新之--12-factors https://blog.csdn.net/weixin_34233421/article/details/85819756 12-factors I. 基准代码 一份 ...

  3. TP5多字段排序

    有业务需求如下: select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7); 这里直入主 ...

  4. 利用TCHART做分离饼形图

    https://www.cnblogs.com/gaodu2003/archive/2009/06/18/1505720.html unit Unit1; interface ……type  TFor ...

  5. 如何删除docker镜像中已配置的volume

    场景: 有个同学不知道因为啥,将容器内部的 /sys/fs/cgroup 挂载到了外面的某个目录: 但是这个目录是很有用的,不想随便被挂载,如何从image中去掉呢? docker没有给出一个方便的方 ...

  6. 【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[4]:在 CKB 上实现 WebAssembly

    作者:Xuejie 原文链接:https://xuejie.space/2019_10_09_introduction_to_ckb_script_programming_wasm_on_ckb/ N ...

  7. k8s-Annotation(注解)

    k8s-Annotation(注解) Annotation与Label类似,也使用key/value键值对的形式进行定义. Label具有严格的命名规则,它定义的是Kubernetes对象的元数据(M ...

  8. C#生成/调用动态链接库

    参考地址:https://www.cnblogs.com/qq4004229/archive/2013/01/30/2882409.html 一.需求描述 (1)用代码生成动态链接库 (2)用C#代码 ...

  9. Restart container within pod

    https://stackoverflow.com/questions/46123457/restart-container-within-pod 命令 kubectl exec -it [POD_N ...

  10. 测试欧气的小游戏-java

    Java 用我们学到的知识做处一个小的项目或者游戏等等应该都或多或少的有一点点的成就感吧,下列就是我用所学的基础知识做的猜字谜游戏,并且给他赋予了灵魂哈哈哈.有兴趣的可以尝试的用自己会的知识做一些小的 ...