reduce方法的使用

一些之前掌握的东西,一段时间不用,还是会忘啊,所以还是要勤于总结,回顾,多敲几次,多看几遍,加深理解,做到真正的掌握(给自己来针大管鸡血,哈哈哈)
!!! reduce的用法
reduce()方法里边,有两部分,第一是个回调函数,第二个参数是设置的初始值。
回调函数中可以有四个参数,第一个参数是上一次回调返回的值,或者设置的初始值,第二个参数是当前被处理的项,第三个参数是当前被处理项的索引值,第四项是原数组,一般使用前两个参数,后俩可以省略
下面举例看一下,reduce的使用场景

  1. 第一种,用于累加求和
// 1.一组数求和
let total = [1, 2, 3, 4, 5].reduce((acc, cur) => acc + cur, 0)    
// 2.数组对象种某一个参数累加   
let total = [{id: 1}, {id: 2}, {id: 3}].reduce((acc, cur) => acc + cur.id, 0)
  1. 第二种,把二维数组变一维数组
  let flattened = [[1, 2],[3, 4],[5, 6]].reduce((acc, cur) => acc.concat(cur), [])
    console.log(flattened)  // 【1,2,3,4,5,6]
  1. 第三种,计算每个元素出现的次数
 const names = ['Alice', 'Bob', 'Bob', 'Tiff', 'Bruce', 'Alice'];
    let countedNames = names.reduce((allnames, name) => {
      name in allnames ? allnames[name]++ : allnames[name] = 1
      return allnames
    }, {})

    console.log(countedNames)
  1. 数组去重
    先看下简单数组
let arr = [0, 1, 2, 3, 4, 4, 1]

    let newarr = arr.reduce((acc, cur) => {
      return acc.includes(cur) ? acc : acc.concat(cur)
    }, [])
    console.log(newarr)

延伸一下,比如数组对象,根据每一项中的某个参数去重,
下面封装了一个方法,用于数组去重,大家可以看下

  let arr = [0, 1, 2, 3, 4, 4, 1]
  let objarr = [{
      ids: 1,
      names: '张三'
    }, {
      ids: 2,
      names: '李四'
    }, {
      ids: 2,
      names: '李四'
    }, {
      ids: 3,
      names: '王五'
    }, {
      ids: 4,
      names: '刘六'
    }, {
      ids: 5,
      names: '白七'
    }]
    // 数组去重
    function removeDuplicats(ary, key) {
      if (ary.length === 0) return ary
      if (key) {
        let obj = {}
        let newArr = ary.reduce((acc, cur) => {
          obj[cur[key]] ? '' : (obj[cur[key]] = true && acc.push(cur))
          return acc
        }, [])
        return newArr
      } else {
        return Array.from(new Set(ary))
      }
    }
    console.log('简单数组', removeDuplicats(arr))
    console.log('对象数组', removeDuplicats(objarr, 'ids'))

嗯,暂时就是这些,技术有限,欢迎各位大佬指教评论。。。。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值