详解JavaScript 高阶函数


Posted in Javascript onSeptember 14, 2020

高阶函数简介

高阶函数 的英文名叫 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]

以上就是详解JavaScript 高阶函数的详细内容,更多关于JavaScript 高阶函数的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
js优化针对IE6.0起作用(详细整理)
Dec 25 Javascript
window.onload与$(document).ready()的区别分析
May 30 Javascript
jquery获得当前html页面源码的方法
Jul 14 Javascript
javascript发送短信验证码实现代码
Nov 12 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
Jul 18 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
Mongoose学习全面理解(推荐)
Jan 21 Javascript
基于Vue实现timepicker
Apr 25 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
Aug 25 Javascript
vue-自定义组件传值的实例讲解
Sep 18 Javascript
vue实现自定义H5视频播放器的方法步骤
Jul 01 Javascript
JavaScript原型式继承实现方法
Nov 06 Javascript
vue实现简单计算商品价格
Sep 14 #Javascript
Vue中添加滚动事件设置的方法详解
Sep 14 #Javascript
JavaScript位置参数实现原理及过程解析
Sep 14 #Javascript
swiper自定义分页器的样式
Sep 14 #Javascript
js+canvas实现转盘效果(两个版本)
Sep 13 #Javascript
js实现3D粒子酷炫动态旋转特效
Sep 13 #Javascript
原生JS实现九宫格抽奖
Sep 13 #Javascript
You might like
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
实例讲解React 组件
2020/07/07 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
python实现各进制转换的总结大全
2017/06/18 Python
老生常谈Python startswith()函数与endswith函数
2017/09/08 Python
python调用API实现智能回复机器人
2018/04/10 Python
Django组件cookie与session的具体使用
2019/06/05 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
python 实现批量图片识别并翻译
2020/11/02 Python
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
C#实现启动一个进程
2016/10/01 面试题
药剂专业学生求职信范文
2013/12/28 职场文书
营销总经理岗位职责
2014/02/02 职场文书
经典商业广告词
2014/03/13 职场文书
企业金融服务方案
2014/06/03 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
抢劫罪辩护词
2015/05/21 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python