javascript reduce()方法

相信挺多人对这个方法还是那么的陌生,其实也能理解,毕竟它能做到的事情还有其他的方法能做到。下面就说一下我个人的理解吧!!!

reduce()方法:

用法:

array.reduce(function(total,currentData,currentIndex,originArr),initialvalue)

参数解释:

total:必需。可作为初始值也是函数计算返回后的值;

currentValue: 必需。数组的当前每一项。

currentIndex:当前每一项的索引,从0开始;

originArr: 源数组。

initislvalue: 设置的初始值,后续从这关联计算,如果省略,则从数组的第一项开始。

reduce方法会对数组的每一项进行遍历,如果当前数组为空,那么不会执行回调函数!另外,回调函数必需要有返回值。

let arr = [1,3,5,7,9]
    arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      console.log('total,currentData,currentIndex,originArr :>> ', total,currentData,currentIndex,originArr);
      return total+currentData
    },0)

有哪些场景应用呢???这个如果让我临时想,怕是一脸懵,于是就网上找点总结下吧!

  1. 如上述例子,可用于数组数据的计算。我们不仅仅看到例子的加法,可以赋予更复杂形式的计算。

假如此数组元素不是number类型的呢?如下

 let arr = [{value:1},{value:3},{value:5}]
    let value = arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      return total+currentData.value
    },0)
    console.log('value :>> ', value);//9
  1. 可将二维数组转为一维数组

let arr = [1,3,[5,7,9]]
    let value = arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      return total.concat(currentData)
    },[])
    console.log('value :>> ', value);//1,3,5,7,9

那如果n维数组转一维数组呢?

3.计算每个元素出现的次数。(现给你一个简单数组,计算每个元素出现的次数,统计结果用一个对象来表示,比如{a:2,b:1,c:5})

let arr = ['a','b','a','a','c','d','d']
    let value = arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      if(total[currentData]){
        total[currentData]+=1
      }else{
        total[currentData]=1
      }
      return total
    },{})
    console.log('value :>> ', value);//{a: 3, b: 1, c: 1, d: 2}
  1. 数组去重

let arr = ['a','b','a','a','c','d','d']
    let value = arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      if(total.includes(currentData)){
        return total
      }else{
        total.push(currentData)
        return total
        // return total.concat(currentData)
      }
    },[])
    console.log('value :>> ', value);//['a', 'b', 'c', 'd']

reduce并非独一无二,只不过有时候或许能让事情变得简单点,当然了,比如for循环一个个处理,用了reduce代码看起来是不是有那么点高级呢,哈哈哈哈。只能说知道有这个方法就好,能记住每一个参数那便更好,实际操作又不是让你默写,百度随时查!!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值