JS高阶函数的使用
1.何为高阶函数呢?
JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。简单来说,就是对其他函数进行操作的函数就为高阶函数。
2.下面就介绍一下在JS中常见的filter()/reduce()/map()这三个高阶函数
filter()函数:是用于把Array的某些元素过滤掉,然后返回剩下的元素。它要求我们传入一个回调函数。且回调函数的返回值必须是一个Boolean值,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
2.2就比如说,有个需求要求出一个数组中小于100的数字:
2.3话不多说,直接看代码:
<script>
const nums = [10, 20, 30, 55, 60, 102, 105];
let news = nums.filter((n) => {
return n < 100;
});
console.log(news);
</script>
2.4我们再来看看传统的做法,代码如下
<script>
const nums = [10, 20, 30, 55, 60, 102, 105];
let news = [];
for (let i of nums) {
if (i < 100) {
news.push(i);
}
}
console.log(news);
</script>
结果展示:

由上面可以看出虽然是一样的功能,但filter()函数是非常方便的,当上面filter()函数返回值为true时,函数内部会自动将这次回调的n加入新的数组news当中,当为false时,函数内部会自动过滤n,所以filter函数代码效率也是相对于普通做法较高的。
map()函数:是指返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。map()函数用法与filter函数用法也是差不多的,也是要求我们传入一个回调函数。
需要注意的是:1.map()不会对空数组进行检测
2.map() 不会改变原始数组
还是老样子:看需求实现功能:要求把数组中小于100的数乘以2
代码如下:
<script>
const nums = [10, 20, 30, 55, 60, 102, 105];
let news = nums.filter((n) => {
return n < 100;
});
let news2 = news.map((n) => {
return n * 2
})
console.log(news);
console.log(news2);
</script>
结果如下:

reduce()函数: 是要我们传入两个参数如(callback,[initialValue]),reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,其中回调函数callback中接受四个参数:1.初始值(或者上一次回调函数的返回值),2.当前元素值,3.当前索引,4.调用 reduce 的数组 。而[initialValue])是(作为第一次调用 callback 的第一个参数。)
简单一点来说,这个函数就是对数组中所有的内容进行汇总,如全部相加,相乘等。
老样子,看需求实现一个数组所有数相加的和:
<script>
const nums = [10, 20, 40, 50, 60];
let total = nums.reduce((preValue, n) => {
return preValue + n;
}, 0);
console.log(total);
//第一次:preValue 0 n 10
//第一次:preValue 10 n 20
//第一次:preValue 30 n 40
//第一次:preValue 70 n 50
//第一次:preValue 120 n 60
</script>
结果如下:
总结:网上的帖子大多都是深浅不一,甚至有些前后矛盾,这个文章都是本人学习过程中的总结,如果发现错误,欢迎各位大佬留言指出,谢谢大家
参考视频资料:https://www.bilibili.com/video/BV15741177Eh?p=46&share_source=copy_web的第P45集
JS高阶函数的使用的更多相关文章
- JS高阶函数的理解(函数作为参数传递)
JS高阶函数的理解 高阶函数是指至少满足下列条件之一的函数. · 函数可以作为参数被传递 · 函数可以作为返回值输出 一个例子,我们想在页面中创建100个div节点,这是一种写法.我们发现并不是所有用 ...
- React.js高阶函数的定义与使用
/* 高阶函数的简单定义与使用 一: 先定义一个普通组件 二: 用function higherOrder(WrappendComponent) { return } 将组件包裹起来,并用export ...
- js高阶函数
我是一个对js还不是很精通的选手: 关于高阶函数详细的解释 一个高阶函数需要满足的条件(任选其一即可) 1:函数可以作为参数被传递 2:函数可以作为返回值输出 吧函数作为参数传递,这代表我们可以抽离一 ...
- js高阶函数应用—函数防抖和节流
高阶函数指的是至少满足下列两个条件之一的函数: 1. 函数可以作为参数被传递:2.函数可以作为返回值输出: javaScript中的函数显然具备高级函数的特征,这使得函数运用更灵活,作为学习js必定会 ...
- js 高阶函数 闭包
摘自 https://www.cnblogs.com/bobodeboke/p/5594647.html 建议结合另外一篇关于闭包的文章一起阅读:http://www.cnblogs.com/bob ...
- 浅谈JS高阶函数
引入 我们都知道函数是被设计为执行特定任务的代码块,会在某代码调用它时被执行,获得返回值或者实现其他功能.函数有函数名和参数,而函数参数是当调用函数接收的真实的值. 今天要说的高阶函数的英文为High ...
- JS 高阶函数
笔记整理自:廖雪峰老师的JS教程 目录 概述 Array中的高阶函数 map(返回新的Array) reduce(返回新的Array) filter(返回新的Array) sort(返回同一Array ...
- js高阶函数应用—函数柯里化和反柯里化
在Lambda演算(一套数理逻辑的形式系统,具体我也没深入研究过)中有个小技巧:假如一个函数只能收一个参数,那么这个函数怎么实现加法呢,因为高阶函数是可以当参数传递和返回值的,所以问题就简化为:写一个 ...
- js高阶函数map和reduce
map 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下: 由于map()方法定义在JavaScr ...
随机推荐
- html-新闻滚动条
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS 反射机制及 Reflect 详解
一.什么是反射机制 反射机制是在编译阶段不知道是哪个类被加载,而是在运行的时候才加载.执行. 也就是说,反射机制指的是程序在运行时能够获取自身的信息. js 中的 apply 就是反射机制. 二.Re ...
- 痞子衡嵌入式:串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP. 在嵌入式世界里,当我们提起XiP设备(支持代码原地 ...
- 状压dp(总结)状态压缩
状压这个和二进制分不开关系 所以,对于二进制的熟悉是必不可少的技能 & 与操作,1不变,0变0 | 或操作,0不变,1变1 ^ 异或操作,0不变,1取反 - 取反操作,把每一个二进制位0 ...
- Linux实现ffmpeg H.265视频编码
Linux实现ffmpeg H.265视频编码 几乎所有观看的视频,数字地面电视,电缆,卫星或互联网上的压缩.原始的,未压缩的视频太大,会浪费太多的带宽.在DVD和Blu-ray之前,有视频CD(VC ...
- PyTorch 进行 Neural-Transfer
PyTorch 进行 Neural-Transfer 1.简介 本文讲解如何实现由 Leon A. Gatys,Alexander S. Ecker和Matthias Bethge提出的Neural- ...
- PyTorch 图像分类
PyTorch 图像分类 如何定义神经网络,计算损失值和网络里权重的更新. 应该怎么处理数据? 通常来说,处理图像,文本,语音或者视频数据时,可以使用标准 python 包将数据加载成 numpy 数 ...
- BEP 7:CUDA外部内存管理插件(上)
BEP 7:CUDA外部内存管理插件(上) 背景和目标 在CUDA阵列接口使得能够共享不同的Python之间的数据库的访问CUDA设备.但是,每个库都与其它库区别对待.例如: Numba在内部管理内存 ...
- CVPR2020:点云弱监督三维语义分割的多路径区域挖掘
CVPR2020:点云弱监督三维语义分割的多路径区域挖掘 Multi-Path Region Mining for Weakly Supervised 3D Semantic Segmentation ...
- 【NX二次开发】Block UI 绘图区
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...