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

Posted aiguangyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端面试 JavaScript— 什么是高阶函数?数组中的高阶函数有哪些?相关的知识,希望对你有一定的参考价值。

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

数组中的高阶函数如下:

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值进行升序排序,也就是根据字符串的比较规则进行升序排序。

以上是关于前端面试 JavaScript— 什么是高阶函数?数组中的高阶函数有哪些?的主要内容,如果未能解决你的问题,请参考以下文章

前端React面试题总结

前端React面试题总结

前端面试 JavaScript— 什么是闭包?

一道面试题引发的对javascript类型转换的思考

Android面试Kotlin高阶之必问三连

朝夕教育2023年03月 其他-Web前端基础面试题(react专项_35道)