zoukankan      html  css  js  c++  java
  • js笔记--高阶函数map() reduce()

    编写高阶函数,就是让函数的参数能够接收别的函数。

      例:    

      function add(x, y, f) {
          return f(x) + f(y);
      }
    (1)map()
       map()方法定义在JavaScript的Array中,调用Arraymap()方法,传入自己的函数,就得到了一个新的Array作为结果
         例:      
          function pow(x) {
              return x * x;
          }

           var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
           var results = arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]

       map()传入的参数为函数;

         例:

          var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
          arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9'],将数组中的元素转为字符串,放到新数组
     (2)reduce
        
    Array的reduce()把一个函数作用在这个Array[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算
          例:
          [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

     (3)练习题目
       1.利用reduce()求积:
        答:
          function product(arr) {
            return arr.reduce(function (x, y) {return x * y;});
          }
        2.不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数:
        答:
        
      
    function string2int(s) { 

              var arr=s.split('');
              var arr2=arr.map(function(x){ return x*1});
              var num=arr2.reduce(function (x, y) {return x * 10 + y;});
              return num;

            }

        3.请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']
          答:
            function normalize(arr) {
              var arr1=arr.map(function(x){return x.toUpperCase()});
              var arr3=[]
              for(let i=0;i<arr1.length;i++){
                arr3[i]=arr1[i].substr(0,1)+arr1[i].substr(1).toLowerCase();
               }
              return arr3;
            }
            或
            function normalize(arr) {
              var arr2=arr.map(function(x){return x.substr(0,1).toUpperCase()+x.substr(1).toLowerCase()});//可直接得出结果
              return arr2;
            }
         4.小明希望利用map()把字符串变成整数,他写的代码很简洁:
          var arr=['1','2','3'];
          var r;
          r = arr.map(parseInt);
         结果竟然是1, NaN, NaN,小明百思不得其解,请帮他找到原因并修正代码。
          答:
            var arr = ['1', '2', '3'];
            var r;
            r = arr.map(function(x){return parseInt(x)});

         出错原因:

              由于map()接收的回调函数可以有3个参数:callback(currentValue, index, array),通常我们仅需要第一个参数,而忽略了传入的后面两个参数。

              不幸的是,parseInt(string, radix)没有忽略第二个参数,导致实际执行的函数分别是:

    
    
            • parseInt('1', 0); // 1, 按十进制转换

            • parseInt('2', 1); // NaN, 没有一进制

            • parseInt('3', 2); // NaN, 按二进制转换不允许出现3

    
    

              可以改为r = arr.map(Number);,因为Number(value)函数仅接收一个参数。

     
     
    参考廖雪峰老师的官方网站
     

     

  • 相关阅读:
    js面试题-----算法类
    js面试题-----安全类
    js面试题-----通信类
    js面试题-----面向对象类
    js面试题-----HTTP协议类
    js面试题-----CSS盒模型
    Java-JVM 类的初始化
    加密的相关基础
    AngularJS-directive.js 基本指令
    AngularJS-liveRoomDirective.js 直播间指令
  • 原文地址:https://www.cnblogs.com/lst-315/p/11460915.html
Copyright © 2011-2022 走看看