reduce()累计器理解与使用实例

关于reduce()

reduce()语法:
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

arr.reduce((accumulator,curValue,curIndex,arr)=>{ 
	return accumulator+curValue
},initialValue)
  • accumulator 累计器
  • currentValue 当前值
  • currentIndex 当前索引
  • array 数组

如果提供了initialValue,accumulator取值为initialValue,currentValue取值数组中第一个值
如果没有提供initialValue,accumulator取值数组中第一个值,currentValue取值数组中第二个值

  1. 求数组累计值
let arr = [1,2,3,4,5]
let newArr = []
let one = arr.reduce((accumulator,currentValue,currentIndex,array)=>{
   newArr.push(accumulator+currentValue)
   return accumulator+currentValue
})
console.log(newArr,one) //[3, 6, 10, 15] 15
  1. 求对象累计值
let arr = [{x:1}, {x: 2}, {x: 3},{x:4},{x:5}]
let newArr = []
let one = arr.reduce((accumulator,currentValue,currentIndex,array)=>{
   console.log(accumulator,currentValue.x,accumulator+currentValue.x)
   if(accumulator !== 0){
      newArr.push(accumulator+currentValue.x)
   }
   return accumulator+currentValue.x
},0)
console.log(newArr,one) //[3, 6, 10, 15] 15
  1. 去重
let arr = [2,3,1,3,3,2];
let newArr = arr.reduce((accumulator,currentValue)=>{
   console.log(accumulator,currentValue,'11111111')
   if(!accumulator.includes(currentValue)){ // 累计值查找不到当前值的话,当前值拼接到累计值中
      return accumulator.concat(currentValue)
   }else{
      return accumulator
   }
},[])
console.log('newArr',newArr)   //[2, 3, 1]
newArr = newArr.sort((first,second)=>{  return  first - second}) // 升序
console.log('newArr',newArr)  //[1,2,3]
  1. 求元素的次数
 const arr = ['A', 'B', 'T', 'B', 'A'];
 let one = arr.reduce( (accumulator, currentValue) => {
    if (currentValue in accumulator) {
       console.log(accumulator,'currentValue')
       accumulator[currentValue]++;
    } else {
       accumulator[currentValue] = 1;
    }
    return accumulator;
 }, {});
 console.log(one) // {A: 2, B: 2, T: 1}

待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值