码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ES6 高阶函数的使用详解


    高阶函数是ES6提供的新方法。只所以叫高阶函数是因为这些方法参数都是函数,也就是在函数里面传函数。这就是所谓的函数式编程,函数是一等公民。而传统的面向对象编程,对象是第一公民。
    主要高阶函数有filter,map和reduce。这三个函数实际上就是用来替代for循环,更加的高效方便。

    filter函数

    有这样的需求:
    1.过滤数组中小于100的数字,arr=[10,99,101,22,33]。
    传统做法就是遍历加判断。ES6提供新的方式(可以提供高阶函数)来快速实现这种功能。
    这种写法是少很多代码的,也不要for循环了。而且会将结果直接添加到新的数组里面,这个用传统方法写代码还是比较多的。

                    let arr=[10,99,101,22,33]
                    let newArr
                    newArr=arr.filter(function (n) {
                        return n<100
                    })
                    console.log(newArr);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    map

    2.需求:将数组中的元素乘以二,arr=[10,99,101,22,33]。

     				let arr=[10,99,101,22,33]
                    let newArr=arr.map(function (n) {
                        return n*2
                    })
                    console.log(newArr)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    reduce

    3.需求将数组中的元素累加,arr=[10,99,101,22,33]
    可以实现遍历数组,并且拿到前一个值和当前值,这样我们就可以实现类似累加或者累乘等操作。
    下面的代码实现累加,比for还是少一些代码的。需要传两个参数第一个和上面一样,传一个函数,第二个参数实际上是给prevValue一个初值。这里是0。
    reduce相对来说难一点,不过他的本质就是拿到前一个值和当前值

    				let arr=[10,99,101,22,33]
                    let newArr=arr.reduce(function (prevValue,currentValue) {
                        return prevValue+currentValue
                    },0)
                    console.log(newArr);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    整合例子

    把上面三个函数一起用。
    4.需求:筛选小于100的元素,然后乘以2,然后把数组累加。
    就是将上面的写法连在一起。

          		   let arr=[10,99,101,22,33]
                   let total= arr.filter(function (value) {
                        return value<100
                    }).map(function (value) {
                        return value*2
                    }).reduce(function (prev,cur){
                         return prev+cur
                    },0)
                    console.log(total)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    通过箭头函数简化(lambda表达式)

    实际上就是lambda表达式。

      let arr=[10,99,101,22,33]        
      let total= arr.filter(n=>n<100)
                    .map(n=>n*2)
                    .reduce((prev,cur)=>prev+cur)
      console.log(total)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    计算书籍总价实例

    下面的例子在实际开发中很常见。计算图书的总价,总价等于单价乘数量,再累加每种类型的书目。使用高阶函数就可以非常简单的实现。

     totalPrice(){
             return this.books.map(book => book.num*book.price).reduce((prev,cur)=>prev+cur)
          }
    
    • 1
    • 2
    • 3
  • 相关阅读:
    typescript72-已有的类型声明文件(第三方库的类型文件)
    MQTT例程
    小白自己​制作一个苹果.ios安卓.apk文件app应用手机下载的代码合并文件一码双端的落地页面详细教程
    数据库理论 05 关系数据库设计——基于《数据库系统概念》第七版
    【视频】复杂网络分析CNA简介与R语言对婚礼数据聚类(社区检测)和可视化|数据分享
    pmp项目管理考试是什么?适合哪些人学?
    java-php-python--损失赔偿保险的客户情况登记及管理-计算机毕业设计
    windows下Mysql多实例部署
    大数据开发好找工作么?还能入行么?
    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12.A)- uSDHC eMMC启动时间(RT1170)
  • 原文地址:https://blog.csdn.net/ScottePerk/article/details/126812993
  • 最新文章
  • 从 cursor 、 Claude code 迁移到 codex,30 分钟快速上手 codex 常用技巧
    《觉醒时刻:AI Agent引爆企业效率革命》第一章
    Calico BGP 网络模型生产实践
    一次线上慢查询,竟然查出了 MySQL 溢出页问题
    FFmpeg开发笔记(一百零二)国产的音视频移动开源工具FFmpegAndroid
    17. LangChain FewShotPromptTemplate少样本应用实战
    AI摆摊:在 muShanghai × 观猹 AI 练摊集市的一次高密度体验
    硬件版【Cursor】?aily blockly IDE尝鲜封神,实战硬伤尽显
    莱特摩比的一面之缘(前端经验)
    洛谷-P10786 [NOI2024] 百万富翁 题解
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号