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 ...
随机推荐
- [leetcode] 68. 文本左右对齐(国区第240位AC的~)
68. 文本左右对齐 国区第240位AC的~我还以为坑很多呢,一次过,嘿嘿,开心 其实很简单,注意题意:使用"贪心算法"来放置给定的单词:也就是说,尽可能多地往每行中放置单词. 也 ...
- Jmeter- 笔记3 - Jmeter录制功能 / 抓包
http代理服务器录制脚本: 1.新建线程组 2.添加 http代理服务器 元件 3.http代理服务器修改: 1)端口:8899,任意给个无占用的 2)目标控制器:改成刚刚新建的线程组.不改就录制会 ...
- js动态加载HTML元素时出现的无效的点击事件
项目中列表数据中隐藏着详情数据, 图一: 详情数据是:根据当前行的数据作为参数,通过ajax请求到后台返回的数据,再根据返回的结果动态生成HTML页面 图二: js文件中的这些js的点击事件无效: j ...
- 2.5D Visual Sound:CVPR2019论文解析
2.5D Visual Sound:CVPR2019论文解析 论文链接: http://openaccess.thecvf.com/content_CVPR_2019/papers/Gao_2.5D_ ...
- Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读
Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读 Action4D: Online Action Recognition in the Crowd and Clutter 论文链接 ...
- A100 GPU硬件架构
A100 GPU硬件架构 NVIDIA GA100 GPU由多个GPU处理群集(GPC),纹理处理群集(TPC),流式多处理器(SM)和HBM2内存控制器组成. GA100 GPU的完整实现包括以下单 ...
- 孟老板 BaseAdapter封装(五) ListAdapter
BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...
- CArray CList CMap 插入与遍历效率对比
前言:程序中经常用到不定量数组,选择上可以使用CArray,CList,CMap,而这三者插入及遍历的效率,未测试过,随着数据量越来越大,需要做程序上的优化,于是比较下三种类型的插入盒遍历的效率. 一 ...
- 一篇文章带你搞懂 etcd 3.5 的核心特性
作者 唐聪,腾讯云资深工程师,极客时间专栏<etcd实战课>作者,etcd活跃贡献者,主要负责腾讯云大规模k8s/etcd平台.有状态服务容器化.在离线混部等产品研发设计工作. etcd ...
- 【NX二次开发】Block UI RGB颜色选择器
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...