什么是高阶函数
概念如下: 一个函数可以接受另一个函数作为参数或者返回值为一个函数,那么这个函数就是高阶函数。
数组方法中的高阶函数
-
map
- 参数:接受两个参数,第一个是回调函数,第二个是执行回调函数时用于this的值
- 返回值:创建一个新数组,其结果是原数组中每个元素执行回调函数后返回的结果
- 不改变原数组
let arr = [1, 2, 3] let obj = {val: 4} let res = arr.map(function (item, index, arr) { return item + index + array[index] + this.val // 1 + 0 + 1 + 4 = 6 // 2 + 1 + 2 + 4 = 9 // 3 + 2 + 3 + 4 = 12 }, obj) console.log(res) // [6, 9, 12]
需要注意的是,一般我们写的回调函数都是用箭头函数的形式,若要使用map的第二个参数,则需要写成普通函数的形式,因为箭头函数没有this
-
filter
- 参数:一个函数参数,这个函数用来测试数组中每个元素。返回true表示该元素通过测试,保留该元素,fasle则不保留
- 返回值:一个新数组,由通过测试的元素组成,如果没有元素通过测试,则返回空数组。
- 不改变原数组
let arr = [4, 6, 8, 10] let res = arr.filter(item => item > 6) console.log(res) // [8, 10]
-
reduce
- 参数:接受两个参数,一个为回调函数,另一个为初始值。回调函数有三个默认参数,分别为积累值、当前值和数组
- 返回值:使用回调函数遍历数组后的结果。数组中的每个元素会按序执行回调函数,每一次运行回调函数会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值
let arr = [1, 2, 3, 4] let res = arr.reduce((preVal, curVal, arr) => preVal + curVal, 0) console.log(res) // 10
如果不传初始值的话,则会以数组第一个元素为初始值,然后从第二个元素开始依次累计
-
sort
- 参数:按某种顺序进行排列的函数,该函数有两个默认参数,代表两个进行比较的元素
- 返回值:经过排序后的数组
- 会改变原数组
let arr = [1, 3, 4, 2] arr.sort((a, b) => { if (a > b) return 1 else if (a < b) return -1 else if(a == b) return 0 }) console.log(arr) // [1, 2, 3, 4]
当比较的两个元素返回值大于0,则a在b的后面。 若返回值小于0,则a在b的前面。 这样当所有元素都比较完,就完成了一个升序的排列。 若是要实现升序排列,可简写成以下样子:
arr.sort((a, b) => a - b)