概念:一个函数接收另一个函数作为参数,那么这个函数就称为高阶函数,如数组的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将原本返回的二维数组变成了一维数组,而将三维数组变成了二维数组