博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript数组方法之reduce
阅读量:4330 次
发布时间:2019-06-06

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

又见到数组方法了,在前面已经的多次写到过数组方法,甚至都使用原生方法重构了一遍数组的各个方法,可是随着数组方法reduce的应用,发现reduce真的是妙用无穷啊!还是很值得再拿出来说一遍的。

我们再看MDN上关于reduce的解释:

reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。

示例也比较简单,是对数组求和:

const array1 = [1, 2, 3, 4];const reducer = (accumulator, currentValue) => accumulator + currentValue;console.log(array1.reduce(reducer));console.log(array1.reduce(reducer, 5));

会给出两个示例,是基于reduce方法第二个参数是最为reduce所有计算的基础值的。

刚开始看、甚至重构了之后,都没怎么用过reduce,所以其实一直以来都没怎么真正明白怎么用,什么场景用?
最近在项目中刻意的寻找一些使用reduce的机会,多次使用之后,突然发现:哇,reduce原来这么?!
看一个使用场景

const summary = lineStatus.reduce((accu, curr) => {     const sum = curr.HEAVYLOAD + curr.MEDIUMLOAD + curr.LIGHTLOAD         return {            HEAVYLOAD: accu.HEAVYLOAD + curr.HEAVYLOAD,            MEDIUMLOAD: accu.MEDIUMLOAD + curr.MEDIUMLOAD,            LIGHTLOAD: accu.LIGHTLOAD + curr.LIGHTLOAD,            max: sum > accu.max ? sum : accu.max        }    }, { HEAVYLOAD: 0, MEDIUMLOAD: 0, LIGHTLOAD: 0, max: 0 })

发现什么了么?我是在分别统计数组当中HEAVYLOAD、MEDIUMLOAD、LIGHTLOAD属性之和,并且计算了每一个元素中的HEAVYLOAD、MEDIUMLOAD、LIGHTLOAD三个属性之后的最大值。仅仅使用了一次reduce而已,是不是很强大?

再看一个使用场景:

const data = arr.reduce((accu, curr) => {    accu[0].push({        actual: curr['TOTALNUM_20KV'],        value: this.calcPercent(curr['TOTALNUM_20KV'], max)    })    accu[1].push({        actual: curr['NUM_20KV'],        value: this.calcPercent(curr['NUM_20KV'], max)    })    return accu}, [[], []])

这次又干了什么呢?是分别统计了arr数组当中TOTALNUM_20KV属性值、和NUM_20KV属性值各自组成了一个数组,并且统一返回了所求的值。

看出点什么了不?
关键点在于reduce的基数值类型,我们可以做很多事情,但是关键点在于reduce的回调函数需要有返回值,而且必须要有返回值

转载于:https://www.cnblogs.com/zhuhuoxingguang/p/11175900.html

你可能感兴趣的文章
Centos 7 Mysql 最大连接数超了问题解决
查看>>
thymeleaf 自定义标签
查看>>
关于WordCount的作业
查看>>
C6748和音频ADC连接时候的TDM以及I2S格式问题
查看>>
UIView的layoutSubviews,initWithFrame,initWithCoder方法
查看>>
STM32+IAP方案 实现网络升级应用固件
查看>>
用74HC165读8个按键状态
查看>>
jpg转bmp(使用libjpeg)
查看>>
linear-gradient常用实现效果
查看>>
sql语言的一大类 DML 数据的操纵语言
查看>>
VMware黑屏解决方法
查看>>
JS中各种跳转解析
查看>>
JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
查看>>
Ecust OJ
查看>>
P3384 【模板】树链剖分
查看>>
Thrift源码分析(二)-- 协议和编解码
查看>>
考勤系统之计算工作小时数
查看>>
4.1 分解条件式
查看>>
Equivalent Strings
查看>>
flume handler
查看>>