zoukankan      html  css  js  c++  java
  • js 高阶函数

    map

    遍历Array数据进行操作后返回新数组

    //计算平方
    function square(a){
      return a * a;
    }
    var arr = [1,2,3,4,5,6];
    var newArr = arr.map(square)
    // newArr = [1,4,9,16,25,36]

    parseInt 使用注意

    var arr = ['1','2','3'];
    var newArr = arr.map(parseInt)
    // 结果为 [1,NaN,NaN]
    // 原因是parseInt为两个参数  
    // 第一个参数为要转换的字符串  
    // 第二个参数为基数 表示要解析的数字的基数。该值介于 2 ~ 36 之间。
    // 如果省略该参数或其值为 0,则数字将以 10 为基数来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
    // 如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
    // 所以实际调用结果为  parseInt('1',0)  parseInt('2',1)  parseInt('3',2)

    解决方案

    arr.map(Number)
    //还可以把parseInt 在包装一层
    function myParseInt(a){
        return parseInt(a);
    }
    arr.map(myParseInt)

    reduce

    Array这个函数 必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算

    var arr = [1,2,3,4,5];
    function plus(a,b){
        return a + b;
    }
    //需要接收两个参数的函数
    var result = arr.reduce(plus)
    // 计算得到result等于15 
    //arr.reduce(plus) = plus(plus(plus(plus(1,2),3),4),5)

    filter

    Array的某些元素过滤掉,然后返回剩下的元素

    var arr = [1,2,3,4,5,6];
    var newArr = arr.filter((element,index,self) => {
      //element 元素
      //index  索引
      //self  就是arr数组
      //返回ture 则保留元素  false则删除元素
      return if(element % 2 === 0)
    });
    // 结果 newArr = [2,4,6]

    sort

    给Array排序

    排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个对象呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素xy,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

    JavaScript的Arraysort()方法就是用于排序的,但是排序结果可能让你大吃一惊:

    // 看上去正常的结果:
    ['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft'];
    
    // apple排在了最后:
    ['Google', 'apple', 'Microsoft'].sort(); // ['Google', 'Microsoft", 'apple']
    
    // 无法理解的结果:
    [10, 20, 1, 2].sort(); // [1, 10, 2, 20]
    

    第二个排序把apple排在了最后,是因为字符串根据ASCII码进行排序,而小写字母a的ASCII码在大写字母之后。

    第三个排序结果是什么鬼?简单的数字排序都能错?

    这是因为Arraysort()方法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,因为字符'1'比字符'2'的ASCII码小。

    数字数组排序

    var arr = [100,50,73,7,1,10,63]
    arr.sort(function (x, y) {
        if (x < y) {
            return -1;
        }
        if (x > y) {
            return 1;
        }
        return 0;
    });
    // 注意排序会改变原数组 console.log(arr);
    // [1,7,10,50,63,73,100]

    对象数组排序 一般是按照对象的一个字段或多个字段排序

  • 相关阅读:
    linux ubuntu 中文汉化
    微信内核浏览器一些用法
    struts2解耦和获取提交的值
    html背景图片自适应
    Heroku 云服务部署流程
    mac 遇到的奇怪问题?
    h5完美实现无刷新上传并附带上传效果
    ionic 实现 应用内(webview中html页面点击) 和 应用外 (浏览器html页面点击) 打开本地安装应用
    ionic 实现微信朋友圈分享的完整开发流程
    OpenGL ES学习笔记(三)——纹理
  • 原文地址:https://www.cnblogs.com/rchao/p/14900385.html
Copyright © 2011-2022 走看看