array-reduce方法去实现map filter flat

1,156 阅读1分钟
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…