第一次关注reduce)是在对象数组去重里。
var arr = [{name:’Thor’,id:1},{name:’Locki’,id:1},{name:’Tony’,id:2}]
var hash= {}
arr = arr.reducefunctioncur,next){
hash[next.id]?”:hash[next.id]===true&&cur.pushnext)
return cur
},[])
上面代码是从数组arr里去掉重复id的元素。
arr.reducefunc),[])传入了两个参数:匿名函数和空数组[]。
在匿名函数里的两个参数:cur指累积变量,next指被遍历的数组元素。
如果没有指定参数-空数组[],累积变量cur默认是第一个元素的值
在指定参数空数组后,累积变量cur的初始值就变成了空数组。
所以上面代码就是判断hash对象里是否已存入了当前arr数组元素的id,如果存入了,则遍历下一个元素,并把第一次存入时的元素添加到累积变量cur里。这样最后函数返回的就是去掉重复id的数组。
上面是reduce)的一个应用。下面是关于reduce)的基本介绍: 参考阮大神的介绍,reduce)对数组进行了:遍历、变形和累积操作。前提是累积变量初始值为数组。具体看下面例子:
var arr = [0,1,2,3,4]
var handler = functionitem,next){
item.pushnext+1)
return item
}
arr.reducehandler),[])
//输出结果是:[1,2,3,4,5]
首先,reduce)对数组arr进行了遍历
其次,经过reduce)处理的数组被修改。类似map)函数
最后,通过item这个累积变量,把所有元素累积在一起。这个例子里是通过push方法。
其实更能体现reduce)累积作用的例子是下面这个:
`
var arr = [0,1,2,3,4]
var summary = arr.reducefunctionsum,n){
sum += n
return sum
},0)
console.logsummary)
//输出结果为:10
`
上面代码里,arr数组的每个成员被遍历求和。sum作为累积变量,初始值是0.
如果不提供第二个参数0,sum初始值也会默认为arr的第一个元素即0。
同理,对于数组的阶乘,可以很方便的使用如下代码做到:
var arr = [1,2,3,4,5]
var times = arr.reducefunctionres,n){
res *= n
return res;
})
console.logtimes)
//输出结果为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