zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

前端面试 【JavaScript】— 什么是高阶函数?数组中的高阶函数有哪些?

2023-03-15 23:26:03 时间

何为高阶函数?一个函数就可以接收另一个函数作为参数或者返回值为一个函数,这种函数就称之为高阶函数。

数组中的高阶函数如下:

1. map 遍历

1. 对原来的数组没有影响;

2. 创建一个新数组,其结果是该数组中的每个元素都调用提供的函数后返回的结果;

3. 接收两个参数,一个是回调函数,一个是回调函数的this值(可选)。其中,回调函数被默认传入三个值,依次为当前元素、当前索引、整个数组。

let nums = [1, 2, 3]; 
let obj = { val: 5 }; 
let newNums = nums.map(function (item, index, array) { 
    return item + index + array[index] + this.val;
    // 对第一个元素,1 + 0 + 1 + 5 = 7
    // 对第二个元素,2 + 1 + 2 + 5 = 10
    // 对第三个元素,3 + 2 + 3 + 5 = 13
}, obj);
console.log(newNums);
//[7, 10, 13]

当然,后面的参数都是可选的,不用的话可以省略。

2. reduce 缩减

1. 接收两个参数,一个为回调函数,另一个为初始值。回调函数中四个默认参数,依次为积累值、当前值、当前索引和整个数组。

let nums= [1, 2, 3];
// 多个数的加和
let newNums = nums.reduce(function(preSum,curVal,currentIndex,array) {
    return preSum + curVal;
}, 0);
console.log(newNums);
//6

不传初始值会怎样?

不传默认值会自动以第一个元素为初始值,然后从第二个元素开始依次累计。

3. filter 过滤

1. 接收一个函数作为参数,这个函数有一个默认参数,就是当前元素。这个作为参数的函数返回值为一个布尔类型,决定当前元素是否保留;

2. 返回值为一个新的数组,这个数组里面包含参数里面所有被保留的项。

let nums= [1, 2, 3];
// 保留奇数项
let oddNums = nums.filter(item=>item%2);
console.log(oddNums);
// [1, 3]

4. sort 排序

1. 一个用于比较的函数,它有两个默认参数,分别是代表比较的两个元素。

let nums= [2, 3, 1];
nums.sort(function(a, b) {
    if(a>b) {
        return 1
    }else if(a<b) {
        return -1;
    }else if(a==b){
        return 0;
    }
});
console.log(nums);
// [1, 2, 3]

当比较函数返回值大于0,则 a 在 b 的后面,即a的下标应该比b大。反之,则 a 在 b 的后面,即 a 的下标比 b 小。整个过程就完成了一次升序的排列。

当然还有一个需要注意的情况,就是比较函数不传的时候,是如何进行排序的?

答案是将数字转换为字符串,然后根据字母unicode值进行升序排序,也就是根据字符串的比较规则进行升序排序。