博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不为人知的reduce()方法
阅读量:7247 次
发布时间:2019-06-29

本文共 1777 字,大约阅读时间需要 5 分钟。

我也是最近才知道有reduce方法,reduce方法是干嘛的,查了一下文档,原来可以做好多事情。可以把很多面试的算法题变简单。

1、语法

arr.reduce(callback,[initialValue])复制代码

reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

callback (执行数组中每个值的函数,包含四个参数)    1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))    2、currentValue (数组中当前被处理的元素)    3、index (当前元素在数组中的索引)    4、array (调用 reduce 的数组)initialValue (作为第一次调用 callback 的第一个参数。)复制代码

2.reduce的简单用法

(1)数组求和,数组求积

var  arr = [1, 2, 3, 4];var sum = arr.reduce((x,y)=>x+y)var mul = arr.reduce((x,y)=>x*y)console.log( sum ); //求和,10console.log( mul ); //求乘积,24复制代码

(2)计算数组中每个元素出现的次数

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];let nameNum = names.reduce((pre,cur)=>{  if(cur in pre){    pre[cur]++  }else{    pre[cur] = 1   }  return pre},{})console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}复制代码

(3)数组去重

let arr = [1,2,3,4,4,1]let newArr = arr.reduce((pre,cur)=>{    if(!pre.includes(cur)){      return pre.concat(cur)    }else{      return pre    }},[])console.log(newArr);// [1, 2, 3, 4]复制代码

(4)二位数组转化为一维数组

let arr = [[0, 1], [2, 3], [4, 5]]let newArr = arr.reduce((pre,cur)=>{    return pre.concat(cur)},[])console.log(newArr); // [0, 1, 2, 3, 4, 5]复制代码

(5)将多维数组转化为一维

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]const newArr = function(arr){   return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])}console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]复制代码

(6)对象里的属性求和

var result = [    {        subject: 'math',        score: 10    },    {        subject: 'chinese',        score: 20    },    {        subject: 'english',        score: 30    }];var sum = result.reduce(function(prev, cur) {    return cur.score + prev;}, 0);console.log(sum) //60复制代码

转载于:https://juejin.im/post/5cdbaaf4f265da039c057673

你可能感兴趣的文章
干货 | Elasticsearch通用优化建议
查看>>
AI文娱独角兽Video++极链科技完成C1轮,5个月融资10.7亿元
查看>>
angularjs学习笔记—指令input
查看>>
Google Jib 即将迎来正式版
查看>>
自己动手实现一个前端路由
查看>>
python高级特性-迭代
查看>>
广义动量定理的6要素
查看>>
linux shell变量$#,$@,$0,$1,$2的含义解释
查看>>
XFtp中文乱码解决
查看>>
使用C# (.NET Core) 实现观察者模式 (Observer Pattern) 并介绍 delegate 和 event
查看>>
防止页面被iframe恶意嵌套
查看>>
小米冲击A股首单CDR,“独角兽”回归闸门已开?
查看>>
面向UI编程:ui.js 1.1 使用观察者模式完成组件之间数据流转,彻底分离组件之间的耦合,完成组件的高内聚...
查看>>
DT时代阿里云流计算让业务实时、让数据发电
查看>>
Pycharm节能模式
查看>>
Why Redis 4.0?
查看>>
Anaconda 安装好了,却无法运行?
查看>>
KVM资源划分分配技巧
查看>>
刘博宇:Druid在滴滴应用实践及平台化建设
查看>>
JAVA 设计模式 中介者模式
查看>>