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…數組

相關文章
相關標籤/搜索