reduce作為ES5新增的常規數組方法之一,是一個強大的方法。本篇文章給大家介紹一下25個數組reduce高級用法。

reduce作為ES5新增的常規數組方法之一,對比forEach、filter和map,在實際使用上好像有些被忽略,發現身邊的人極少使用它,導致這個如此強大的方法被逐漸埋沒。
如果經常使用reduce,怎么可能放過如此好用的它呢!我還是得把他從塵土中取出來擦干凈,奉上它的高級用法給大家。一個如此好用的方法不應該被大眾埋沒。
下面對reduce的語法進行簡單說明,詳情可查看MDN的reduce()的相關說明。
- 定義:對數組中的每個元素執行一個自定義的累計器,將其結果匯總為單個返回值
- 形式:
array.reduce((t, v, i, a) => {}, initValue) - 參數
- callback:回調函數(
必選) - initValue:初始值(
可選)
- callback:回調函數(
- 回調函數的參數
- total(
t):累計器完成計算的返回值(必選) - value(
v):當前元素(必選) - index(
i):當前元素的索引(可選) - array(
a):當前元素所屬的數組對象(可選)
- total(
- 過程
- 以
t作為累計結果的初始值,不設置t則以數組第一個元素為初始值 - 開始遍歷,使用累計器處理
v,將v的映射結果累計到t上,結束此次循環,返回t - 進入下一次循環,重復上述操作,直至數組最后一個元素
- 結束遍歷,返回最終的
t
- 以
reduce的精華所在是將累計器逐個作用于數組成員上,把上一次輸出的值作為下一次輸入的值。下面舉個簡單的栗子,看看reduce的計算結果。
const arr = [3, 5, 1, 4, 2]; const a = arr.reduce((t, v) => t + v); // 等同于 const b = arr.reduce((t, v) => t + v, 0);

reduce實質上是一個累計器函數,通過用戶自定義的累計器對數組成員進行自定義累計,得出一個由累計器生成的值。另外reduce還有一個胞弟reduceRight,兩個方法的功能其實是一樣的,只不過reduce是升序執行,reduceRight是降序執行。
對空數組調用reduce()和reduceRight()是不會執行其回調函數的,可認為reduce()對空數組無效
高級用法
單憑以上一個簡單栗子不足以說明reduce是個什么。為了展示reduce的魅力,我為大家提供25種場景來應用reduce的高級用法。有部分高級用法可能需要結合其他方法來實現,這樣為reduce的多元化提供了
站長資訊網