数组方法中的高阶函数

31 阅读2分钟

什么是高阶函数

概念如下: 一个函数可以接受另一个函数作为参数或者返回值为一个函数,那么这个函数就是高阶函数。

数组方法中的高阶函数

  1. 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

  2. filter

    • 参数:一个函数参数,这个函数用来测试数组中每个元素。返回true表示该元素通过测试,保留该元素,fasle则不保留
    • 返回值:一个新数组,由通过测试的元素组成,如果没有元素通过测试,则返回空数组。
    • 不改变原数组
    let arr = [4, 6, 8, 10]
    let res = arr.filter(item => item > 6)
    console.log(res) // [8, 10]
    
  3. reduce

    • 参数:接受两个参数,一个为回调函数,另一个为初始值。回调函数有三个默认参数,分别为积累值、当前值和数组
    • 返回值:使用回调函数遍历数组后的结果。数组中的每个元素会按序执行回调函数,每一次运行回调函数会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值
    let arr = [1, 2, 3, 4]
    let res = arr.reduce((preVal, curVal, arr) => preVal + curVal, 0)
    console.log(res) // 10
    

    如果不传初始值的话,则会以数组第一个元素为初始值,然后从第二个元素开始依次累计

  4. 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)