JS:高阶函数

149 阅读1分钟

概念:一个函数接收另一个函数作为参数,那么这个函数就称为高阶函数,如数组的map,reduce等遍历数组的方法,一般都有一个函数参数。

Array.map

数组的map方法会遍历原数组,并返回一个由回调函数的返回值组成的数组,示例如下:

let arr = [1,2,3,4]
let res = arr.map((val,idx)=>{
    return val+1
}) 
console.log(res);//[2,3,4,5]

回调函数接收三个值:val,idx,arr(即数组元素,下标,和原数组)

Array.reduce

数组的reduce方法会返回一个遍历数组后经过函数处理的最终值,看代码

let arr = [1,2,3,4]
let res = arr.reduce((total,now)=>{
    return total + now
},0)
console.log(res);//10

这样看会比较难懂,其实reduce是一个累积的过程,他将每一轮处理返回的结果发送给在下一轮的回调函数作为参数(即其中的total参数),而第一轮的total值其实是可以指定的,即reduce函数的第二个参数,我这里写的是0,如果不指定则直接从数组第一个元素开始作为total值,now的值即当前被遍历的元素,最终返回的就是最后一轮处理的return值

Array.flatMap

flatMap其实就是展开一层数组的map函数,flat代表扁平化,而flatMap就代表将返回的值扁平化一层,看看map与flatMap的不同

let arr = [1,2,3,4]
let res1 = arr.map((val)=>[val+1])
let res2 = arr.flatMap((val)=>[val+1])
let res3 = arr.flatMap((val)=>[[val+1]])
console.log(res1);//[[2],[3],[4],[5]]
console.log(res2);//[2,3,4,5]
console.log(res3);//[[2],[3],[4],[5]]

可见flatMap将原本返回的二维数组变成了一维数组,而将三维数组变成了二维数组