數組reduce方法以及高級技巧

基本概念:node

 reduce()方法接收一個函數做爲累加器,數組中的每一個值(從左到右)開始縮減,最終爲一個值。
數組

 reduce爲數組中的每個元素依次執行回調函數。不包括數組中被刪除或從未賦值的元素,接受兩個參數。第一參數是一個回調函數,又接收四個參數:初始值(或者上一次回調函數的返回值),當前元素值,當前索引,調用reduce的數組。第二個參數是做爲第一次調用callback的第一個參數即初始參數。框架

 語法:koa

  arr.reduce(callback, [initialValue])函數

    * callback(執行數組中每個值得函數,包含四個參數)spa

      previousValue(上一次調用回返回的值,或者是提供的初始值(initialValue))3d

      currentValue(數組中當前被處理的元素)對象

      index(當前元素在數組中的索引)blog

      array(調用reduce的數組)遞歸

    * inatialValue(做爲第一次調用callback的第一個參數)

簡單應用

  

  能夠看出,reduce函數根據初始值1,不斷地進行疊加,完成最簡單的遞歸

  reduce函數的返回值結果類型和傳入的初始值相同,上個實例中初始值爲number類型,同理,初始值也能夠爲object類型

  

進階應用

   使用reduce方法能夠完成多維的數據疊加,如上例中的初始值{sum: 0},這僅僅是一個維度的操做,若是涉及到了多個屬性的疊加,如: {sum: 0, totalInEuros: 0, totalInYen: 0}, 則須要相應邏輯進行處理。

  在下面的方法中,採用分而治之的方法,即將reduce函數第一個參數callback封裝一個數組,有數組中的每個函數單獨進行疊加並完成reduce操做。全部的一切經過一個manager函數來管理流程和傳遞初始參數。

  前方高能!!!!!我也是花了半個多小時纔看懂研究出來的,已經加上註釋了,但願可以幫助你,有興趣的能夠研究下

  

  上面manager函數的實現,他須要reducers對象做爲參數,並返回一個callback類型的函數,做爲reduce的第一個參數,在該函數內部,則執行多維的疊加工做(Object.key())。經過這種分而治之的思想,能夠完成對象的多個屬性同時疊加。

  再來舉一個例子:某個同窗的期末成績以下表示

  

  如何求該同窗的總成績?

  

  假設同窗由於違紀被處罰在總成績扣10分,只須要將初始值-10便可。

  

  接下來舉的這個例子,增長一點難度。假設該同窗的總成績中,各科所佔的比重不一樣,分別爲:50%, 30%, 20%,咱們應該如何求出最終的權重結果呢?

  

  再來看一個例子, 如何知道一串字符串中每一個字母出現的次數

  

  因爲能夠經過第二個參數設置疊加結果的類型初始值,所以這個時候reduce就不單單是作一個加法了, 咱們能夠靈活運用它來進行各式各樣的類型轉換爲對象,也能夠將一種形式的數組轉換爲另外一種形式的數組。能夠動手嘗試一下。

  koa(node的框架)源碼中,有一個only模塊,整個模塊就一個簡單的返回reduce方法操做的對象:

  

  但願以上的內容會對你對reduce有更深層次的瞭解,謝謝!

相關文章
相關標籤/搜索