js數(shù)組中的reduce方法

簡單介紹

reduce可以對數(shù)組中的元素從index 0到length-1依次處理,每個元素的處理結果會作為處理下一個元素時所需要的參數(shù),當所有元素處理結束后返回累積結果。

var a = [1,2,3,4]; 
a.reduce(function(a,b,index,array){ 
  console.log(a + " and " + b + " index:" + index);  
  return a+b; 
},1);
******************************************************
1 and 1 index:0
2 and 2 index:1
4 and 3 index:2
7 and 4 index:3
11

上述例子在chrome的console下運行后可看到結果,該例子傳入了兩個參數(shù),callback為單純的累加函數(shù),initialValue為1
為什么會出現(xiàn)log這樣的結果呢?接下來分析一下reduce的兩個參數(shù)


參數(shù)callback與initialValue

官方給出的reduce使用方法如下

 arr.reduce(callback[,initialValue])

接收兩個參數(shù),第一個參數(shù)callback為必選,第二個initialValue為可選

callback

假設當前場景為正在對數(shù)組的第n元素進行callback處理

  • accumulator:累加器,該參數(shù)的值為第n-1個元素處理后的返回值
  • currentValue:該參數(shù)值為第n個元素的值
  • currentIndex:第n個元素的index
  • array:當前數(shù)組的引用

initialValue

callback的第一個參數(shù)為第n-1個參數(shù)處理后的返回值,可是如果n=1(即剛對第一個元素進行callback處理)時accumulator值是多少呢?
initialValue作用就在于解決第一次處理時accumulator值的問題,如果傳入了initialValue,那么第一次callback中accumulator值等于initialValue

接下來根據(jù)例子來看initialValue存在與否對reduce執(zhí)行流程的影響

var a = [1,2,3,4]; 
a.reduce(function(a,b,index,array){ 
  console.log(a + " and " + b + " index:" + index);  
  return a+b; 
});   //可選參數(shù)initialValue未傳入
**************************************************************
1 and 2 index:1
3 and 3 index:2
6 and 4 index:3
10

與文章開篇的第一個例子對比可以發(fā)現(xiàn),傳入initialValue時callback執(zhí)行了4次,未傳入則執(zhí)行了3次,數(shù)組明明有4個元素,這是什么原因呢?

reduce官方介紹說的非常清楚。

initialValue.png

大致意思就是說如果傳入initialValue,則callback的accumulator值為initialValue,currentValue為arr[0],如果未傳入則accumulator值為arr[0],currentValue為arr[1]
如果未傳initialValue的話currentValue會從數(shù)組中第二個元素開始,第一個元素會充當accumulator,這也就解釋了為何兩個例子中callback執(zhí)行次數(shù)不同。

應用

每一個新技術的出現(xiàn)都是為了解決一類問題,reduce也不例外,當我們想將數(shù)組元素或者元素中的某些內容累積時,reduce可以很方便的解決我們的問題。
具體應用請參考官方文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容