Javascript reduce方法

 

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

  

相關文章
相關標籤/搜索