1. 程式人生 > >js中的reduce()函式

js中的reduce()函式

定義:

reduce() 方法接收一個函式作為累加器,陣列中的每個值(從左到右)開始縮減,最終計算為一個值。對空陣列是不會執行回撥函式的。

案例

1.陣列求和

    // 1.陣列求和
    var arr = [1,5,8,6,15,78,65,25,48,55]
    var sum = arr.reduce(function(total,currentValue){
        return total+currentValue;
    });
    console.log(sum);//306
    var eachSum = 0;
    arr.forEach(function(currentValue){
        eachSum += currentValue;
    })
    console.log(eachSum);//306

2.合併二維陣列

    //2.合併二維陣列
    var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']];
    var oneArr = twoArr.reduce(function(total,currentValue){
        // console.log(total)
        return total.concat(currentValue);
    })
    console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]

3.統計一個數組中有多少個不重複的單詞:

    //3.統計一個數組中有多少個不重複的單詞:
    // 不用reduce時: 
    var arr = ["apple","orange","apple","orange","pear","orange"]; 
    function getWordCnt(){ 
        var obj = {}; 
        for(var i= 0, l = arr.length; i< l; i++){ 
            var item = arr[i]; 
            obj[item] = (obj[item] +1 ) || 1; 
        } 
        return obj; 
    }
    console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}
    // 用reduce時: 
    var arr = ["apple","orange","apple","orange","pear","orange"]; 
    function getWordCnt(){ 
        return arr.reduce(function(prev,next){ 
            prev[next] = (prev[next] + 1) || 1; 
            return prev; 
        },{}); 
    } 
    console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}

4.對reduce的理解:
reduce(callback,initiaValue)會傳入兩個變數,回撥函式(callback)和初始值(initiaValue)。
假設函式有個傳入引數,prev和next,index和array。 Prev和next是你必須要了解的。
當沒有傳入初始值時,prev是從陣列中第一個元素開始的,next是第二個函式。
但是當傳入初始值(initiaValue)後,第一個prev將是initivalValue,next將是陣列中的第一個元素。
比如:

    // 4.對reduce的理解:
    var arr = ["apple","orange"]; 
    function noPassValue(){ 
        return arr.reduce(function(prev,next){ 
            console.log("prev:",prev); 
            console.log("next:",next); 
            return prev; 
        }); 
    } 
    
    function passValue(){ 
        return arr.reduce(function(prev,next){ 
            console.log("prev:",prev); 
            console.log("next:",next); 
            prev[next] = 1; 
            return prev; 
        },{});
    } 
    console.log("No Additional parameter:",noPassValue()); 
    console.log("----------------"); 
    console.log("With {} as an additional parameter:",passValue()); 
    
    /*
    VM415673:4 prev: apple 
    VM415673:5 next: orange 
    VM415673:4 prev: apple 
    VM415673:5 next: orange 
    VM415673:19 No Additional parameter: apple 
    VM415673:20 ---------------- 
    VM415673:13 prev: {} 
    VM415673:14 next: apple 
    VM415673:13 prev: {apple: 1} 
    VM415673:14 next: orange 
    VM415673:21 With {} as an additional parameter: {apple: 1, orange: 1}
    */

若有不足請多多指教!希望給您帶來幫助!參考文獻:連結