前端面试 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— 什么是高阶函数?数组中的高阶函数有哪些?的主要内容,如果未能解决你的问题,请参考以下文章