reduce方法接收一個函數做爲累加器,數組中的每一個值(從左至右)開始縮減,最終計算爲一個值後端
注意:reduce()對於空數組是不會執行回調函數數組
語法:函數
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
var arr=[0,1,2,3,4] var sum = arr.reduce(function(total,currentVal,index,arr){ return total + currentVal //等同於 total = total + currentVal },5); console.log(sum) //15
initVal爲函數的初始值spa
當不傳該值的時候,code
var arr=[0,1,2,3,4] var sum = arr.reduce(function(total,currentVal,index,arr){ return total = total + currentVal; }); console.log(sum) //10
內部執行順序爲blog
index的值是從1開始的,total的初始值爲index=0的value,然後再循環累加回調函數
在函數的參數裏面,total的描述爲,初始值,或是計算結束後端的返回值,咦,難道total做爲初始值使用的時候和initVal的結果是同樣的;it
var arr=[0,1,2,3,4] var sum = arr.reduce(function(total,currentVal,index,arr){ total = 5; return total = total + currentVal; }); console.log(sum) //9
我且先給total一個初始值,按照理想的應該輸出的是14,但是結果輸出的是9;io
看運行過程console
total的值一直爲5,原來每一次運行都要從新賦值一遍total,因此結果是每次的固定total值與當前的currentVal相加,因此最後獲得的值爲9
因此,目前寫下來,以爲total做爲初始值處理的意義不大,若是要想給初始值仍是initVal用起來方便。
若數組爲空數組;
var arr=[] var sum = arr.reduce(function(total,currentVal,index,arr){ console.log(total,currentVal,index,arr)//不會輸出 return 'a' //不會返回 },1); console.log(sum) //1 有初始值的狀況下,返回初始值,沒有初始值直接報錯
當數組有空項的時候,直接跳過
var arr=[0,1,,,4] var sum = arr.reduce(function(total,currentVal,index,arr){ console.log(total,currentVal,index,arr) return total=total+currentVal }); console.log(sum) //5