zoukankan      html  css  js  c++  java
  • JavaScript 常见 高阶函数的使用

    其实就是函数来的 ,下面讲常见的几种高阶函数: 三个:

    filter / map / reduce

    1.Array filter() 方法

    如果有数组: let arr = [60,50,105,99,153,125,29]; 如果要把小于100 的过滤出来,那么:

    其实这个方法有过滤器的意思,所以就是过滤,他的参数是一个函数,函数的参数就是这个遍历值,其次这个函数一定得返回一个 Boolean 型,为true时 吧这个值返回装进一个新数组,为false则不加入新数组,到最后结束就 把 整个新数组当返回值返回:

      <script>
        let arr = [60,50,105,99,153,125,29];
        //先获取到大于100 的数
        arr = arr.filter(function (item){
            return item < 100;
        });
        
    //打印
        for (const number of arr) {
            console.log(number);
        }
      </script>

    注意: filter() 不会对空数组进行检测。

    注意: filter() 不会改变原始数组。

    2. Array map() 方法  

    其实 map 也一样 不会更新数组 他返回的是一个新数组,其次,他对每个元素进行遍历,他返回的不是布尔型,返回什么都可以,你返回什么 我就往里面装什么:

      <script>
        let arr = [60,50,105,99,153,125,29];
        //直接遍历 然后每个元素*2 然后更新数组即可
        arr = arr.map(function (item){
            return item *= 2;
        });
    
    //打印
        for (const number of arr) {
            console.log(number);
        }
      </script>

    因为他有这个特性,所以他可以直接放入方法:

    var numbers = [4, 9, 16, 25];
    
    function myFunction() {
        x = document.getElementById("demo")
        x.innerHTML = numbers.map(Math.sqrt);
    }

    可以看出 Math.sqrt是个球平方根的函数,是的 他是一个函数! 仔细想想即可。

    3.reduce() 方法

    其实这个有点绕 但是很简单:

    比如我要吧数组里面的全部值求出来:

      <script>
        let arr = [60,50,105,99,153,125,29];
        //直接求出即可
        let total = arr.reduce(function (sum,n){
            return sum + n;
        },0)
        console.log(total);
    
        /***
         * 这里我解析一下:
         * reduce 这个函数 第一个参数是个方法,第二个参数是初始值
         * 然后第一个参数中的 第一个参数sum是初始值来的,这个方法每次遍历arr中的元素,放在参数n中
         * 这个方法的返回值呢就是赋给sum,所以sum就会一直随着遍历而增加n 所以求出来了arr中的总和
         * 
         * 当然你也可以尝试一下乘或者除, 但是呢 他一定是从左到右(下标0到下标leng-1)
         */
    
      </script>

    其实吧  注释文档写的很清楚了,蛮简单的 就是内个 初始值 要注意一下 一般为0;sum类似于静态的,而n是每次遍历的元素值。

    注意: reduce() 对于空数组是不会执行回调函数的。

    语法

    array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

    看下面除了内几个还有些很好玩的参数:比如下标

    参数描述
    function(total,currentValue, index,arr) 必需。用于执行每个数组元素的函数。
    函数参数:
    参数描述
    total 必需。初始值, 或者计算结束后的返回值。
    currentValue 必需。当前元素
    currentIndex 可选。当前元素的索引
    arr 可选。当前元素所属的数组对象。
    initialValue 可选。传递给函数的初始值

    总结:总结:

    其实 你得举一反三:

    1、2、3 我这里讲了三个高阶函数【常用的】 ,那么你就得去把他们结合起来:

    他们返回的是一个数组对吧,那你可以用链式编程 在他们计算完后.xxxx 继续写,那么

    你就可以把你要用到的代码很压缩成一点点了,这是一个思维。

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14988217.html

  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14988217.html
Copyright © 2011-2022 走看看