js筆記--高階函數map() reduce()

編寫高階函數,就是讓函數的參數可以接收別的函數。javascript

  例:    java

  function add(x, y, f) {    return f(x) + f(y);   }
(1)map()
   map()方法定義在JavaScript的Array中,調用Arraymap()方法,傳入本身的函數,就獲得了一個新的Array做爲結果
     例:      
   map()ArrayArraymap()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()傳入的參數爲函數;函數

     例:網站

Array的把一個函數做用在這個的上,這個函數必須接收兩個參數,把結果繼續和序列的下一個元素作累積計算
      例:      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
    
reduce()Array[x1, x2, x3...]reduce()
      [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

 (3)練習題目
   1.利用reduce()求積:
    答:
reduce()
      function product(arr) {
        return arr.reduce(function (x, y) {return x * y;});
      }
function string2int(s) {    2.不要使用JavaScript內置的parseInt()函數,利用map和reduce操做實現一個string2int()函數:
    答:
    
  parseInt()string2int() 

          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;spa

        }code

    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.小明但願利用把字符串變成整數,他寫的代碼很簡潔:
      var arr=['1','2','3'];
      var r;
      r = arr.map(parseInt);
     結果居然是,小明百思不得其解,請幫他找到緣由並修正代碼。
      答:
        var arr = ['1', '2', '3'];
        var r;
        r = arr.map(function(x){return parseInt(x)});

     出錯緣由:
map()1, NaN, NaN

          因爲map()接收的回調函數能夠有3個參數:callback(currentValue, index, array),一般咱們僅須要第一個參數,而忽略了傳入的後面兩個參數。orm

          不幸的是,parseInt(string, radix)沒有忽略第二個參數,致使實際執行的函數分別是:ip

 
          • parseInt('1', 0); // 1, 按十進制轉換字符串

          • parseInt('2', 1); // NaN, 沒有一進制

          • parseInt('3', 2); // NaN, 按二進制轉換不容許出現3

 

          能夠改成r = arr.map(Number);,由於Number(value)函數僅接收一個參數。

 
 
 參考廖雪峯老師的官方網站
相關文章
相關標籤/搜索