详解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


猜你喜欢
- 1 Pytorch以ONNX方式保存模型 def saveONNX(model, filepath): ''
- 这篇文章主要介绍了python文字转语音实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 很多时候我们的redis的IP地址一般都是默认的127.0.0.1代表只能接受本机的访问,因此我们其他机器上想要访问这个redis的时候,就
- 本文实例介绍了基于python的Tkinter实现简易计算器的详细代码,分享给大家供大家参考,具体内容如下第一种:使用python 的 Tk
- mysql建表test;安装logstash(跟es版本一致)# 下载wget https://repo.huaweicloud.com/l
- 有的时候,我们在网页中会用到复选框,也就是多选框,当用户提交输入信息的时候我们会获取复选框的内容,然后保存到数据库中,如经常用到的是用户输入
- #!/usr/bin/python#coding=gbkclass User: def __init__
- 在采集美女站时,需要对关键词进行分词,最终采用的是python的结巴分词方法。中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分
- MySQL分区方便了我们的使用,但是MySQL分区究竟能做些什么,MySQL分区有没有什么限制呢?阅读下文,您就能找到答案。MySQL分区能
- 1. ref在Vue3中,ref成为了一个全家桶,除了用于创建响应式数据之外,还可以用于引用DOM元素、组件实例和其他对象。以下是ref的具
- 前言:Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数,itertools提供的几个“无限
- 为了使一个MySQL系统安全,强烈要求你考虑下列建议……当你连接一个MySQL服务器时,你通常应
- python中字典是非常常用的数据类型,了解各种方法的作用及优缺点对于字典的使用非常有用。dict.clear() 的方法用于清空所有的键值
- 本文实例讲述了js实现照片墙功能的方法。分享给大家供大家参考。具体实现方法如下:<!doctype html><html
- 一、http协议无状态问题http协议没有提供多次请求之间的关联功能,协议的本意也并未考虑到多次请求之间的状态维持,每一次请求都被协议认为是
- 本文实例为大家分享了python实现Nao机器人单目测距的具体代码,供大家参考,具体内容如下此代码适于用做对Nao机器人做视觉识
- 本文实例讲述了python日期相关操作。分享给大家供大家参考,具体如下:用 Python 做项目时,经常会遇到与日期转换相关,日期计算相关的
- 本文实例讲述了Python Web编程之WSGI协议。分享给大家供大家参考,具体如下:WSGI简介Web框架和Wen服务器之间需要进行通信,
- 就像标题呈现的一样,SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入、更新或删除操作。最典型
- 太多程序员没有太多心思去关注他们每天都在面对的编程字体,然后编码工作需要长时间盯着屏幕并阅读一些非常复杂的文本。一个好的字体可以很大程度上提