array-reduce方法去实现map filter flat

reduce: 可以讲数组中的每个值(从左到右开始合并,最终返回一个值)
const numbers = [37, 12, 28, 4, 9]
const total = numbers.reduce((total, n) => total + n)
console.log(total) // 90
复制代码
reducer有4个参数:
    1.acc 累加器
    2.cur 当前值
    3.idx 当前索引
    4.src 源数组
复制代码
除了基本的用法之外,reduce还可以做什么?
可以模仿变成map的方法:
    const map = (arr, fn) => {
      return arr.reduce((mappedArr, element) => {
        return [...mappedArr, fn(element)]
      }, [])
    }
    console.log(map([1, 2, 3, 4], n => n + 1)) // [2, 3, 4, 5]
复制代码
可以模仿变成filter方法
  const filter = (arr, fn) => {
     return arr.reduce((filteredArr, element) => {
       return fn(element) ? [...filteredArr] : [...filteredArr, element]
     }, [])
   }     
   console.log(filter([1, 2, 3, 4, 5, 6], n => n % 2 === 0)) // [1, 3, 5]
复制代码
  扁平化 
   function flatDeep(arr) {
       return arr.reduce((flattenArray, element) => {
           return Array.isArray(element) ? [...flattenArray, ...flatDeep(element)]
           :[...flattenArray, element]
       }, [])
   }
   
   console.log(flatDeep([1,2,3,[4,[5,6]],8,9]))
复制代码

参考文章: thomlom.dev/what-you-sh…

转载于:https://juejin.im/post/5cac66d9e51d456e7c0cdab6

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值