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

  • 相关阅读:
    【django后端分离】Django Rest Framework之一般配置(简单剖析)
    【python小随笔】celery周期任务(简单原理)
    【django后端分离】mysql原生查询命令后,RawQueryset类型的自定义序列化返回json格式
    【python小随笔】Django+错误日志(配置Django报错文件指定位置)
    luogu P3194 [HNOI2008]水平可见直线 |单调栈
    luogu P6247 [SDOI2012]最近最远点对 |随机化
    luogu P3567 [POI2014]KUR-Couriers |莫队+随机化
    P6569 [NOI Online #3 提高组]魔法值| 矩阵乘法
    luogu P1452 【模板】旋转卡壳
    luogu P3829 [SHOI2012]信用卡凸包 |凸包
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14988217.html
Copyright © 2011-2022 走看看