用reduce求和

const sum = [1,2,3,4,5,6].reduce((v,t)=>{

    return v+t;
//第一次v=0,t=1
//第二次v= 0+1,t=2
  //第三次v=1+2,t=3......
},0)//reduce传入两个值,第一个是个函数,第二个是初始值

map处理字符串然后用reduce

const joined = 'this-is-an-example';
joined
.split('-')
.map( word => {//用map将每个单词的第一个字符变成大写
const [head,...others] = word
   console.log(head,others);
return head.toUpperCase() + others.reduce((x,y) => x+y,'')
})
.reduce( (s,word)=>{
console.log('word=='+word);
   return s+' '+word;
})
console.log(joined);

map/reduce处理sql

本质上所有数据处理过程(sql过程)都是map/reduce,所以可以使用map/reduce完成大量操作。而高阶函数让我们可以最大化复用这个计算过程

//所有数据处理都是sql,用map/reduce完成一些sql操作
//假设数据库中有一张成绩单,如下
let students = {
  {id:1,name:'lucy',score:99,class:'a'},
  {id:2,name:'lily',score:88,class:'b'}
}
let selected = students.map( student => {
  return {name:student.name}//最终只会输出name这一字段的值
})
console.log(selected); //比如筛选所有分数大于80的学生 即select name from students where score>80
let selected2 = students.reduce( (list,student) => {
  if(student.score > 80){
    list = [...list,student]
  }
  return list;
},[])
console.log(selected2); /*===================================================*/ //对上述条件筛选的另一思路 map/reduce与高阶函数
//先把函数提取出来,此时并没有用到高阶函数
let selectScoreLargerThan80 = (list,student) => {
  if(student.score > 80){
    list = [...list,student];
  }
  return list;
}
//const selected_2 = students.reduce(selectScoreLargerThan80,[])
//定义一个高阶函数filter,用于生成筛选条件
const filter = (prediction) => {
  return (list,item) => {
    if(prediction(item)){
      list = [...list,item];
    }
  }
}
//使用filter增加筛选条件
const selectScoreLargerThan80_2 = filter(item => item.score > 60)
const selected_2_2 = students.reduce(selectScoreLargerThan80,[]) /*=========================================*/
//按照分数排序(倒序)
//插入排序 select * from students order by score desc
const sorted = students.reduce( (list,student) => {
  let i = 0;
  for(;i<list.length;i++){//这里是插入的过程,排序条件是可变的,所以可以把这部分封装到一个高阶函数
    if(list[i].score < student.score) break;
  }
  return [...list.slice(0,i),student,...list.slice(i,list.length)];//插入排序
},[]) /*========================================*/
//按照班级进行排序(groupby),然后求最大分数,插入排序
// select max(score) from students group by class //将学生按照class分组
const grouped = students.reduce( (groups,student) => {
  if(!groups[student.class]){
    groups[student.class] = {key:student.class,values:[]}
  }
  groups[student.class].values.push(student)
  return groups
},{})
//提取为数组
const arrGroups = Object.values(grouped);
//计算每个分组的最大值
const final = arrGroups.map(group => {
  return {
    class:group.key,
    max:group.values.reduce( (a,b) => {
      return b.score > a ? b.score : a;
    },0)
  }
})
console.log(final); /*===========================*/
//使用原生的filter与find
const selected = students.filter(student => student.score > 60)
const student = students.find(student => student.id === 5)
const sorted = students.sort((student1,student2) => student1.score < student2.score )

整理自魏蒙老师视频

所有的数据处理都是map-reduce的更多相关文章

  1. 基于python的《Hadoop权威指南》一书中气象数据下载和map reduce化数据处理及其可视化

    文档内容: 1:下载<hadoop权威指南>中的气象数据 2:对下载的气象数据归档整理并读取数据 3:对气象数据进行map reduce进行处理 关键词:<Hadoop权威指南> ...

  2. Map Reduce和流处理

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由@从流域到海域翻译,发表于腾讯云+社区 map()和reduce()是在集群式设备上用来做大规模数据处理的方法,用户定义一个特定的映射 ...

  3. Hadoop学习:Map/Reduce初探与小Demo实现

    原文地址:https://blog.csdn.net/liyong199012/article/details/25423221 一.    概念知识介绍 Hadoop MapReduce是一个用于处 ...

  4. hadoop学习WordCount+Block+Split+Shuffle+Map+Reduce技术详解

    转自:http://blog.csdn.net/yczws1/article/details/21899007 纯干货:通过WourdCount程序示例:详细讲解MapReduce之Block+Spl ...

  5. Google的分布式计算模型Map Reduce map函数将输入分割成key/value对

    http://www.nowamagic.net/librarys/veda/detail/1768 上一篇 大规模分布式数据处理平台Hadoop的介绍 中提到了Google的分布式计算模型Map R ...

  6. Hadoop Map/Reduce

    Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集.一个Map/Reduce ...

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

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

  8. python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

    1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

  9. map reduce

    作者:Coldwings链接:https://www.zhihu.com/question/29936822/answer/48586327来源:知乎著作权归作者所有,转载请联系作者获得授权. 简单的 ...

随机推荐

  1. 【leetcode】522. Longest Uncommon Subsequence II

    题目如下: 解题思路:因为given list长度最多是50,我的解法就比较随意了,直接用一个嵌套的循环,判断数组中每个元素是否是其他的subsequence,最后找出不属于任何元素subsequen ...

  2. vue引入css和js的方法

    1.引入js的话 require('地址') imgport xxx from ‘src’ import xxx 2.引入css @import ‘  ’

  3. LeetCode--075--颜色分类(python)

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...

  4. CMD命令行二

    图形化用户界面 calc control mmc notepad regedit (start命令也有用) dir | findstr /i "for" 忽略大小写查找 finds ...

  5. 洛谷P2258 子矩阵——题解

    题目传送 表示一开始也是一脸懵逼,虽然想到了DP,但面对多变的状态不知从何转移及怎么合理记录状态.之(借鉴大佬思路)后,豁然开朗,于是在AC后分享一下题解. 发现数据范围出奇地小,不过越是小的数据范围 ...

  6. webpack学习笔记二

    sourceMap 源代码与打包后的代码的映射关系.例如,在某个源文件中test.js里面有个错误,如果开启状态,那么打包后运行的报错信息就会说明是错误的具体位置,如果是关闭状态,报错后,提示的报错位 ...

  7. 前端String类型转JSON类型

    在js中通过ajax获取数据后,赋值给前端树形插件zTree中的zNodes,但一直失败如图: 浏览器端报错: 于是我将zNodes变量的值直接写死,并打印这两个的值,如图 再次运行成功.浏览器控制台 ...

  8. UITabbarController & UITabbar 学习

    最后更新2016-04-06 一. UITabbarController 给UITabbarController 设置viewControllers熟悉时候,超过五个就会有一个 moreNavigat ...

  9. 如何降低Vue.js项目中Webpack打包文件的大小?

    https://blog.csdn.net/maray/article/details/50988500?utm_source=blogxgwz0 import Blur from ‘vux/src/ ...

  10. CSS多种方式实现底部对齐

    CSS实现底部对齐效果 因公司业务要求需要实现如下图中红色区域的效果: 效果说明: 1.红色区域数据需要倒排(即从底部开始数,数字为1.2.3.4.5),并且显示在最底部 2.当数据过多时需要显示滚动 ...