第一次关注reduce()是在对象数组去重里。

var arr = [{name:’Thor’,id:1},{name:’Locki’,id:1},{name:’Tony’,id:2}]
var hash= {}
arr = arr.reduce(function(cur,next){
hash[next.id]?”:hash[next.id]===true&&cur.push(next)
return cur
},[])

上面代码是从数组arr里去掉重复id的元素。
arr.reduce(func(),[])传入了两个参数:匿名函数和空数组[]。
在匿名函数里的两个参数:cur指累积变量,next指被遍历的数组元素。
如果没有指定参数-空数组[],累积变量cur默认是第一个元素的值
在指定参数空数组后,累积变量cur的初始值就变成了空数组。
所以上面代码就是判断hash对象里是否已存入了当前arr数组元素的id,如果存入了,则遍历下一个元素,并把第一次存入时的元素添加到累积变量cur里。这样最后函数返回的就是去掉重复id的数组。

上面是reduce()的一个应用。下面是关于reduce()的基本介绍: 参考阮大神的介绍,reduce()对数组进行了:遍历、变形和累积操作。前提是累积变量初始值为数组。具体看下面例子:

var arr = [0,1,2,3,4]
var handler = function(item,next){
item.push(next+1)
return item
}
arr.reduce(handler(),[])
//输出结果是:[1,2,3,4,5]

首先,reduce()对数组arr进行了遍历
其次,经过reduce()处理的数组被修改。类似map()函数
最后,通过item这个累积变量,把所有元素累积在一起。这个例子里是通过push方法。

其实更能体现reduce()累积作用的例子是下面这个:

`
var arr = [0,1,2,3,4]
var summary = arr.reduce(function(sum,n){
sum += n
return sum
},0)
console.log(summary)
//输出结果为:10

`

上面代码里,arr数组的每个成员被遍历求和。sum作为累积变量,初始值是0.
如果不提供第二个参数0,sum初始值也会默认为arr的第一个元素即0。

同理,对于数组的阶乘,可以很方便的使用如下代码做到:

var arr = [1,2,3,4,5]
var times = arr.reduce(function(res,n){
res *= n
return res;
})
console.log(times)
//输出结果为120

不知道看完上面介绍,您有没有掌握reduce()的简单使用呢?

如果有兴趣了解的更多,请参考阮大神的博客:
http://www.ruanyifeng.com/blog/2017/03/reduce_transduce.html

———————
作者:keep_and_be_simple
原文:https://blog.csdn.net/qq_39527734/article/details/78828398