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…数组

相关文章
相关标签/搜索