const numbers = [37, 12, 28, 4, 9]
const total = numbers.reduce((total, n) => total + n)
console.log(total) // 90
複製代碼
1.acc 累加器
2.cur 當前值
3.idx 當前索引
4.src 源數組
複製代碼
能夠模仿變成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…數組