reduce方法--理解

126 阅读1分钟
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))//求和
  1. 去重
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']
  1. 找到数组中重复次数最多的值
    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}