1.何为高阶函数呢?

  JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。简单来说,就是对其他函数进行操作的函数就为高阶函数。

2.下面就介绍一下在JS中常见的filter()/reduce()/map()这三个高阶函数

  filter()函数:是用于把Array的某些元素过滤掉,然后返回剩下的元素。它要求我们传入一个回调函数。且回调函数的返回值必须是一个Boolean值,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。

  2.2就比如说,有个需求要求出一个数组中小于100的数字:

  2.3话不多说,直接看代码:

  1. <script>
  2. const nums = [10, 20, 30, 55, 60, 102, 105];
  3. let news = nums.filter((n) => {
  4. return n < 100;
  5. });
  6. console.log(news);
  7. </script>

  2.4我们再来看看传统的做法,代码如下

  1. <script>
  2. const nums = [10, 20, 30, 55, 60, 102, 105];
  3. let news = [];
  4. for (let i of nums) {
  5. if (i < 100) {
  6. news.push(i);
  7. }
  8. }
  9. console.log(news);
  10. </script>

 结果展示:

由上面可以看出虽然是一样的功能,但filter()函数是非常方便的,当上面filter()函数返回值为true时,函数内部会自动将这次回调的n加入新的数组news当中,当为false时,函数内部会自动过滤n,所以filter函数代码效率也是相对于普通做法较高的。

map()函数:是指返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。map()函数用法与filter函数用法也是差不多的,也是要求我们传入一个回调函数。

需要注意的是:1.map()不会对空数组进行检测

       2.map() 不会改变原始数组

还是老样子:看需求实现功能:要求把数组中小于100的数乘以2

代码如下:

  1. <script>
  2. const nums = [10, 20, 30, 55, 60, 102, 105];
  3. let news = nums.filter((n) => {
  4. return n < 100;
  5. });
  6. let news2 = news.map((n) => {
  7. return n * 2
  8. })
  9. console.log(news);
  10. console.log(news2);
  11. </script>

结果如下:

reduce()函数: 是要我们传入两个参数如(callback,[initialValue]),reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,其中回调函数callback中接受四个参数:1.初始值(或者上一次回调函数的返回值),2.当前元素值,3.当前索引,4.调用 reduce 的数组 。而[initialValue])是(作为第一次调用 callback 的第一个参数。)

简单一点来说,这个函数就是对数组中所有的内容进行汇总,如全部相加,相乘等。

老样子,看需求实现一个数组所有数相加的和:

  1. <script>
  2. const nums = [10, 20, 40, 50, 60];
  3. let total = nums.reduce((preValue, n) => {
  4. return preValue + n;
  5. }, 0);
  6. console.log(total);
  7. //第一次:preValue 0 n 10
  8. //第一次:preValue 10 n 20
  9. //第一次:preValue 30 n 40
  10. //第一次:preValue 70 n 50
  11. //第一次:preValue 120 n 60
  12. </script>

结果如下:

 

总结:网上的帖子大多都是深浅不一,甚至有些前后矛盾,这个文章都是本人学习过程中的总结,如果发现错误,欢迎各位大佬留言指出,谢谢大家

参考视频资料:https://www.bilibili.com/video/BV15741177Eh?p=46&share_source=copy_web的第P45集

  

  

  

JS高阶函数的使用的更多相关文章

  1. JS高阶函数的理解(函数作为参数传递)

    JS高阶函数的理解 高阶函数是指至少满足下列条件之一的函数. · 函数可以作为参数被传递 · 函数可以作为返回值输出 一个例子,我们想在页面中创建100个div节点,这是一种写法.我们发现并不是所有用 ...

  2. React.js高阶函数的定义与使用

    /* 高阶函数的简单定义与使用 一: 先定义一个普通组件 二: 用function higherOrder(WrappendComponent) { return } 将组件包裹起来,并用export ...

  3. js高阶函数

    我是一个对js还不是很精通的选手: 关于高阶函数详细的解释 一个高阶函数需要满足的条件(任选其一即可) 1:函数可以作为参数被传递 2:函数可以作为返回值输出 吧函数作为参数传递,这代表我们可以抽离一 ...

  4. js高阶函数应用—函数防抖和节流

    高阶函数指的是至少满足下列两个条件之一的函数: 1. 函数可以作为参数被传递:2.函数可以作为返回值输出: javaScript中的函数显然具备高级函数的特征,这使得函数运用更灵活,作为学习js必定会 ...

  5. js 高阶函数 闭包

    摘自  https://www.cnblogs.com/bobodeboke/p/5594647.html 建议结合另外一篇关于闭包的文章一起阅读:http://www.cnblogs.com/bob ...

  6. 浅谈JS高阶函数

    引入 我们都知道函数是被设计为执行特定任务的代码块,会在某代码调用它时被执行,获得返回值或者实现其他功能.函数有函数名和参数,而函数参数是当调用函数接收的真实的值. 今天要说的高阶函数的英文为High ...

  7. JS 高阶函数

    笔记整理自:廖雪峰老师的JS教程 目录 概述 Array中的高阶函数 map(返回新的Array) reduce(返回新的Array) filter(返回新的Array) sort(返回同一Array ...

  8. js高阶函数应用—函数柯里化和反柯里化

    在Lambda演算(一套数理逻辑的形式系统,具体我也没深入研究过)中有个小技巧:假如一个函数只能收一个参数,那么这个函数怎么实现加法呢,因为高阶函数是可以当参数传递和返回值的,所以问题就简化为:写一个 ...

  9. js高阶函数map和reduce

    map 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下: 由于map()方法定义在JavaScr ...

随机推荐

  1. Go语言流程控制02--选择结构之switch

    package main import "fmt" /* @星座诊所2(switch) 根据用户输入的出生月份猜测其星座: ·白羊(4) 金牛(5) 双子(6) 巨蟹(7) 狮子( ...

  2. Jmeter- 笔记4 - 参数化 、函数

    参数化 调用变量的用法: ${变量名} 参数化第一 二种. 定义变量的两种方法: 配置元件(Config Element) -> 用户定义的变量(User Defined Variables) ...

  3. 整数划分——区间dp(石子合并)

    这不是将一个数以一来划分,而是把一个整数以位来划分 题目描述 如何把一个正整数N(N长度<20)划分为M(M>1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式 ...

  4. Git使用总结(包含Git Bash和Git GUI的使用)(转自CSDN)

    基本命令 初始化设置 配置本机的用户名和Email地址 $ git config --global user.name "Your Name" $ git config --glo ...

  5. Pptx的形状转为WPF的Geometry

    本文是将演示如何解析pptx文件的形状到WPF当中,并且绘制显示出来 安装Openxml sdk 首先,我们先安装nuget的openxml sdk,下面两种方式都可以安装: nuget包管理器控制台 ...

  6. Structured Streaming编程 Programming Guide

    Structured Streaming编程 Programming Guide Overview Quick Example Programming Model Basic Concepts Han ...

  7. java8 函数式编程接口

    java8 函数式接口java.util.function.* @param T 入参类型 @param R 出参类型 1. Function <T,R> 例: Function<I ...

  8. fiddler选项卡-Composer(构建请求)

    Composer Composer支持手动构建http.https和ftp请求.点到composer选项卡界面,我们可以看到下面有一串英文. use this page to compose a Re ...

  9. 笔记-13-多线程 Thread方法 线程安全 生产者和消费者 死锁和阻塞 练习

    题目1 编写程序,创建两个线程对象,一根线程循环输出"播放背景音乐",另一根线程循环输出"显示画面";要求: 1: 1个线程使用Runnable接口的匿名内部类 ...

  10. 【题解】逐个击破 luogu2700

    题目 题目描述: 现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的. 现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算出花费最少 ...