reduce()方法可以搞定的东西,for循环,或者forEach方法有时候也可以搞定,那为啥要用reduce()?这个问题,之前我也想过,要说原因还真找不到,唯一能找到的是:通往成功的道路有很多,但是总有一条路是最捷径的,亦或许reduce()逼格更高...
定义
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
语法
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)参数
| 参数 | 描述 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
function(total,currentValue, index,arr) | 必需。用于执行每个数组元素的函数。 函数参数:
| ||||||||||
initialValue | 可选。传递给函数的初始值 |
浏览器支持
表格中的数字表示支持该方法的第一个浏览器版本号。

前一段时间朋友问我不用for如何获取数组中某个元素出现的个数,此时我想到了reduce这个方法,觉得我们今后可以多用这个方法,更高效,(逼格更高),23333....

这里写了个简陋的方法,我觉得这个需求更好的体现了reduce的好处。
这里total[currentValue] 指的就是当前arr里当前元素出现的次数,我们来打印一下

当2出现的了一次之后,total[currentValue] 的值为1,实际是出现了2次,所以total[currentValue] + 1,最终得出2出现2次,4出现1次,5出现两次,6出现2次,7出现1次,8出现1次。