array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
- total:必需。初始值, 或者计算结束后的返回值。 利用total可以使reduce多功能使用(这个参数比较重要)
- currentValue:必需。当前元素
- currentIndex:可选。当前元素的索引
- arr:可选。当前元素所属的数组对象。
- initialValue:可选。传递给函数的初始值 (理解这几个参数,自己写的时候会更容易)
手写reduce
Array.prototype.reduce=function(cb,initialValue){
const arr = this;// this指当前调用数组
let total = arr[0]||initialValue;// 初始值
for(var i =1;i<arr.length;i++){
total = cb(total,arr[i],i,arr)
}
return total
}
var arr = [1,2,3]
console.log(arr.reduce((prev, item) => prev + item))//求和
- 去重
let arr=['a','b','c','a','d','d','b']
arr.reduce((prev,item)=>{
// prev初始化是[], prev是上次返回的值
!prev.includes(item) && prev.push(item) //prev是否包含当前的item,不包含就push进去
return prev // 没有重复元素的数组prev
},[])
// ['a', 'b', 'c', 'd']
- 找到数组中重复次数最多的值
arr.reduce((prev,item)=>{
// prev初始化是{}
prev[item]++||(prev[item]=1)// prev[item]初始化是1,遇到prev[item](重复数组元素)就+1
return prev
},{})
// {a: 2, b: 2, c: 1, d: 2}