用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. 【LuoguP5171】Earthquake

    题目链接 题意 求满足如下不等式的非负整数 \(x,y\) 的对数 \[ax+by\leq c\] Sol a,b,c 都是非负的,那么先随便变个形: \[y\leq\frac{c-ax}{b}\] ...

  2. pyqt5-橡皮筋控件QRubberBand

    提供一个矩形或线来指示选择或边界 一般结合鼠标事件一同协作 继承于 QWidget import sys from PyQt5.QtWidgets import QApplication, QWidg ...

  3. Python---进阶---文件操作---按需求打印文件的内容

    一. 编写一个程序,当用户输入文件名和行数的时候,将该文件的前N行内容打印到屏幕上 input 去接收一个文件名 input 去接收一个行数 ----------------------------- ...

  4. 利用Pandas和matplotlib分析我爱我家房租区间频率

    前几天利用python爬取了我爱我家的租房的一些数据,就想着能不能对房租进行一波分析,于是通过书籍和博客等查阅了相关资料,进行了房租的区间分析.不得不说,用python做区间分析比我之前用sql关键字 ...

  5. CSS盒子模型(框模型)

     一.如何理解盒子模型  盒子模型(框模型)是css部分非常重要的一部分知识,CSS在处理网页的时候,认为每个元素都处在一个不可见的盒子中.盒子模型的构想,把所有的元素都想象成盒子,那么对网页进行布局 ...

  6. HOJ 2315 Time(模拟)

    Description Kim是一个掌控时间的大师.不同于一般人,他习惯使用秒来计算时间.如果你问他现在是几点,他会告诉你现在是今天的xxxx秒.Mik想要考考Kim.他想知道从某一天的00:00:0 ...

  7. 【bzoj2733】[HNOI2012]永无乡

    题目描述: 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到 ...

  8. 冲刺周二The Second Day

    一.SecondDay照片 二.项目分工 三.今日份燃尽图 四.项目进展 码云团队协同环境构建完毕 利用Leangoo制作任务分工及生成燃尽图 完成AES加解密部分代码 用代码实现对文件的新建.移动. ...

  9. jquery.ui.widget.js

  10. 【洛谷P1310 表达式的值】

    题目链接 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式 ...