详解JavaScript 高阶函数

作者:p8850133 时间:2024-04-18 09:30:14 

高阶函数简介

高阶函数 的英文名叫 Higher-Order Function ,是 函数式编程 中的一种。他的表现形式往往是通过把函数作为参数传入另一个函数,或者将函数作为另一个函数的返回值返回。在实际开发业务中, 高阶函数往往可以抽象我们的代码 ,将我们的命令式编程转换为复用性更高级的函数式编程,从而 提升我们的代码质量 。

下面拿3个面试中常问的高阶函数举例子,希望看完以后能够提升大家对JS的理解,提高我们的代码质量。 chat is cheap,show you my code~

Array.map()

功能介绍

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 map() 方法按照原始数组元素顺序依次处理元素。

tips

注意: map() 不会对空数组进行检测。 注意: map() 不会改变原始数组。

实用意义及代码举例


//如果我们需要将一个数组中,每一项元素全都*2,
 //最基础的作法,是刚学JS时的循环遍历,再每一项中执行*2的操作,例如:
 let arr1 = [0,1,2,3,4,5,6];
 let arr2 = [];
 for (let i = 0;i<arr1.length;i++){
   arr2.push(arr1[i]*2)
 }
 console.log(arr2) //[0, 2, 4, 6, 8, 10, 12]

//这样确实可以达到效果,但是这属于命令式编程;
 //换做Map高阶函数的方法实现起来,只需要1行,复用性也会更强。

let arr1 = [0,1,2,3,4,5,6];
 let arr2 = arr1.map((item)=> item*2)
 console.log(arr2) //[0, 2, 4, 6, 8, 10, 12]

总结:

针对数组中每一项都要做的操作,可以实用map方法

Array.reduce()

功能介绍

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。

tips:

注意: reduce() 对于空数组是不会执行回调函数的。

实用意义及代码举例


 //如果有一个需求,需要我们将数组中每一项求和
 //实用reduce,可以优雅简洁的实现:
 let arr1 = [0,1,2,3,4,5,6];
 let arr2 = arr1.reduce((prev,cur)=>{ //prev代表之前所有项的最终结果,cur代表当前项的值
   return prev+cur
 },0) //这里的0是初始项传入的值,这里写为0
 console.log(arr2) //21 求和完毕

//reduce也可以用于数组去重
 let arr1 = [0,1,2,3,4,5,6,5,6,7,6];
 let arr2 = arr1.reduce((prev,cur)=>{
   //当之前所有项不包含当前项元素时,push,否则直接返回之前所有去重项。
   prev.indexOf(cur) === -1 && prev.push(cur);
   return prev
 },[]) //传入空数组作为初始值
 console.log(arr2) //[0, 1, 2, 3, 4, 5, 6, 7]

总结:

针对数组中所有的项累计计算的操作,最终输入一个值,可以使用reduce方法

Array.filter()

功能介绍

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

tips

注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。

实用代码举例


 //例如,需求为获取数组中所有大于等于4的元素,将他们组成一个数组
 let arr1 = [0,1,2,3,4,5,6,5,6,7,6];
 let arr2 = arr1.filter((item)=>{
   return item >= 4
 },[])
 console.log(arr2) //[4, 5, 6, 5, 6, 7, 6]

总结:

对于数组中每一项的筛选功能,可以使用filter方法

Array.flat()

功能介绍

flat() 方法可以将嵌套数组(多为数组)降维,变成低维数组或者一维数组。(数组摊平展开)

tips

注意: 存在一定兼容性问题,例如IE不兼容

实用代码举例



let arr1 = [0,1,2,3,4,5,[1,2,3],[1,2,[1,2,3,4]],6,7,6];
 let arr2 = arr1.flat(1) //flat中传入需要降维的层数,默认是1,如果有个三维数组他会被降级为二位数组,
 let arr3 = arr1.flat(Infinity) //[0, 1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 1, 2, 3, 4, 6, 7, 6] //如果不管是几维数组,需要得到1维数组的话,可以直接使用Infinity
 console.log(arr2) //[0, 1, 2, 3, 4, 5, 1, 2, 3, 1, 2, [1,2,3,4], 6, 7, 6]

来源:https://juejin.im/post/6871891951164063757?utm_source=tuicool&utm_medium=referral

标签:JavaScript,高阶函数
0
投稿

猜你喜欢

  • python函数默认参数使用避坑指南

    2023-06-19 13:37:50
  • Vue 中生命周期定义及流程

    2024-05-09 15:21:54
  • django 微信网页授权认证api的步骤详解

    2021-09-15 03:58:40
  • Python类的多重继承问题深入分析

    2023-08-13 14:41:17
  • SQL Server中读取XML文件的简单做法

    2008-12-23 15:29:00
  • Mobile Web下的编码设计

    2010-01-28 10:42:00
  • Python文件夹批处理操作代码实例

    2022-12-15 12:58:55
  • ASP.NET MVC实现区域或城市选择

    2023-07-13 17:50:00
  • sqlserver获取当前日期的最大时间值

    2011-09-30 11:44:50
  • Oracle Instr函数实例讲解

    2024-01-14 18:05:32
  • MySQL如何根据不同条件联查不同表的数据if/case

    2024-01-21 14:20:10
  • 解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题

    2022-10-24 05:34:54
  • Python使用scipy保存图片的一些注意点

    2023-12-01 06:06:58
  • 基于pytorch padding=SAME的解决方式

    2023-03-03 05:05:28
  • 浅析python中while循环和for循环

    2022-10-26 18:56:18
  • Python解析pcap文件示例

    2023-05-16 00:08:45
  • Python的Tornado框架实现图片上传及图片大小修改功能

    2023-10-27 06:23:43
  • 对vue.js中this.$emit的深入理解

    2024-04-26 17:40:12
  • 生成静态页面的php函数,php爱好者站推荐

    2024-05-03 15:50:09
  • 小谈MySQL字符集

    2009-02-13 13:30:00
  • asp之家 网络编程 m.aspxhome.com