reduce基础学习以及练习巩固

  1. 语法基础
  2. 累加器
  3. 多维数组扁平化
  4. 数组分块
  5. 字符统计

reduce基础语法

  let value = arr.reduce(function(previousValue, item, index, array) {
    // ...
  }, [initial]);
  
 /*
 参数说明:
  previousValue: 上一次的调用结果:
      initial不存在则第一次previousValue为第一个元素,index为1(从第二个元素开始循环)
      initial存在,index为0(从第一个元素开始循环),previousValue默认为initial的值
  item:元素
  index:索引
  array:当前数组   
*/

累加器:

const arr=[2,3,4,5,6,11]
const sum=arr.reduce((previousValue,item)=>{
  return previousValue+item 
},0)
console.log(sum)//31

多维数组扁平化:

多维数组转一维数组

const arr1 = [123, 6, [2, [1, 0, [1111, 2222]], 3, 5]]
function multiDimensionalToOneDimensional(array) {
  return array.reduce((previousValue, item) => {
    return Array.isArray(item) ? previousValue.concat(multiDimensionalToOneDimensional(item)) : previousValue.concat(item)
  }, [])
}
console.log(multiDimensionalToOneDimensional(arr1))
//[ 123,6,2,1,0,1111,2222,3,5]

数组分块:

根据指定的大小对数组进行分块,分成固定大小的二维数组

const arr3=[2,3,4,5,6,78,9,0,4,1,3,45,6,89,0]
function divisionArray(array,size){
  return array.reduce((previousValue, item) => {
    //previousValue.length确定当前是处在数组中的第几个元素
    if(previousValue[previousValue.length-1].length<size){//只要这个元素的数组数量小于规定值就可以继续向里面添加元素
      previousValue[previousValue.length-1].push(item)
    }else{//如果这个元素的数组已经满了,则在记录数组中push进去一个新数组并把当前的元素放入其中
      previousValue.push([item])
    }
    return previousValue
  },[[]])
}
console.log(divisionArray(arr3,3))
// [ [ 2, 3, 4 ], [ 5, 6, 78 ], [ 9, 0, 4 ], [ 1, 3, 45 ], [ 6, 89, 0 ] ]

字符统计:

统计文本中每个字的数量,以对象的形式输出

const text='今天天气真的很好呀!'
function wordCount(text){
  return text.split('').reduce((previousValue, item)=>{
    if(previousValue[item]){
      previousValue[item]+=1
    }else{
      previousValue[item]=1
    }
    return previousValue
  },{})
}
console.log(wordCount(text))
/*
{
  '今': 1,
  '天': 2,
  '气': 1,
  '真': 1,
  '的': 1,
  '很': 1,
  '好': 1,
  '呀': 1,
  '!': 1
}
*/

这里是引用学习“高级前端进阶”公众号内容后,把自己的代码和理解进行汇总。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值