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
};
};
}
最新文章
- JDK下载、安装、配置环境变量笔记
- JavaScript可否多线程? 深入理解JavaScript定时机制
- UITableView传值(自己使用)(属性,代理传值)
- tomcat安装配置.md
- nyoj221_Tree_subsequent_traversal
- Squid服务日志分析
- super和this区别
- const和#define常量的区别
- css行高line-height的用法(转)
- wx
- C#写PDF文件类库PDF File Writer介绍
- POST和GET的详细解释以及区别
- java去除查询实体字段多值之间空格
- HDU 1045(炮台安置 DFS)
- java代码------charAt()的用法
- MySQL主从复制--原理
- 【Linux技术】常用的Linux系统调用
- am335x 一个按键实现重置 ip 和 root passwd
- mini2440移植uboot 2014.04(六)
- p4570 [BJWC2011]元素
热门文章
- [教程]K8Cscan调用外部程序(Win/Linux批量上控/执行多条命令/保存结果)
- 数据结构部分总结(c语言版)
- 干货|Dubbo社区开发者日经验分享
- 使用ASP.NET Core MVC应用程序中的ResponseCache属性处理缓存(转载)
- ELK部署配置使用记录
- Node.js 连接 MongoDB数据库
- vue.js 如何加载本地json文件
- CSS文本单行或者多行超出区域省略号(...)显示方法
- springboot-发布jar包
- layui扩展组件sliderVerify 实现滑块验证