一、reduce的理解
arr.reduce(function(pre,cur,index,arr){},init)
或者 arr.reduce(function(pre,cur,index,arr){})
-- arr 表示原数组
-- pre 表示上一次调用回调函数后的返回值,或者原始值 init。
如果init设置的值,那么第一次调用回调时,pre值就是init的值,如果没有设置init的值,那么第一次调用回调时,pre值就是arr第一项元素的值
-- cur 当前正在处理的数组元素,若提供init值,cur为数组第一项的值,否则数组第2项的值
-- index 当前正在处理的数组元素的索引 ,若提供init值,则索引为0,否则,索引为1
-- init 表示初始值
二、reduce的应用
1、数组求和或者求乘积
var arr = [1,2,3,4,5]
var sum = arr.reduce((pre,cur) => {
return pre+cur
})
console.log(sum) //15
var sum2 = arr.reduce((pre,cur)=>{
return pre + cur
},2)
console.log(sum2) // 17
2、计算数组中每个元素出现的次数
var arr = ['张三','张三','李四','王五','李四']
var sumArr = arr.reduce((pre,cur)=>{
if(cur in pre){
pre[cur] ++
}else{
pre[cur] = 1
}
return pre
},{})
3、数组的扁平化处理
var arr = [1,[2,[3,4],5],6]
const newArr = (arr) => {
return arr.reduce((pre,cur) => {
return pre.concat(Array.isArray(cur) ? newArr(cur) : cur)
},[])
}
console.log(newArr(arr))
4、数组去重
var arr = [1,1,1,4,5,2,2,4,8,5,8,8,6]
var newArr = arr.reduce((pre,cur)=>{
if(pre.indexOf(cur) < 0){
pre.push(cur)
}
return pre
},[])