2017-09-02 11 views
0

我的目標是找到「總數」在一個數組中。我需要幫助重構我的兩個JS函數到我的代碼中的一個多功能函數(JS array.reduce)

例如此陣列中的每個對象「arrayOfBikes」有一個「免費」屬性,我想查找「免費」的總值。

我想盡量減少我寫的代碼量。

是否可以寫一個函數,數組和項目數是要麼(免費或自行車),我一直在努力之下,以實現它,但我遇到了錯誤「getTotalNumberOfBikes()」

var arrayOfBikes = [ 
{name: "blackhall", lat: 53.3488, lng: -6.281637, free: 22, bikes: 8}, 
{name: "mbrown", lat: 53.341645, lng: -6.29719, free: 14, bikes: 8}, 
{name: "grant street", lat: 53.334123, lng: -6.265436, free: 3, bikes: 27}, 
{name: "gratstreet", lat: 53.339629, lng: -6.243778, free: 19, bikes: 4}, 
{name: "hardstreet", lat: 53.355473, lng: -6.264423, free: 14, bikes: 2} 
]; 


function getTotalNumberOfFreeBikes(_array){ 

    let arrayOfFreeBikes = []; 

    _array.forEach(function(element){ 
    arrayOfFreeBikes.push(element.free); 
    }); 

    return arrayOfFreeBikes.reduce(function(_previousValue, _currentValue){ 
    return _previousValue + _currentValue; 
    }, 0); 

} 

function getTotalNumberOfBikes(_array){ 

    let arrayOfBikes = []; 

    _array.forEach(function(element){ 
    arrayOfBikes.push(element.bikes); 
    }); 

    return arrayOfBikes.reduce(function(_previousValue, _currentValue){ 
    return _previousValue + _currentValue; 
    }, 0); 

}//getTotalNumberOfBikes 


document.getElementById('freeBikes').innerHTML = 'Total free bikes : ' + getTotalNumberOfFreeBikes(arrayOfBikes); 
document.getElementById('Bikes').innerHTML = 'Total bikes : ' + getTotalNumberOfBikes(arrayOfBikes); 


function getTotalNumberOfBikes(_array, _item){ 

    let arrayOfBikes = [], itemToCount = _array._item; 

    _array.forEach(function(element){ 
    arrayOfBikes.push(itemToCount); 
    }); 

    return arrayOfBikes.reduce(function(_previousValue, _currentValue){ 
    return _previousValue + _currentValue; 
    }, 0); 

}//getTotalNumberOfBikes 

回答

5

Reduce是爲這個完美的:

var count = arrayOfBikes.reduce((acc, curr) => acc + curr.free, 0) 

如果你想推廣它,你可以做這樣的事情:

function getCountOf(array, prop) { 
    return array.reduce((acc, curr) => acc + curr[prop], 0) 
} 

console.log(getCountOf(arrayOfBikes, 'free')) 
// 72 
console.log(getCountOf(arrayOfBikes, 'bikes')) 
// 49 
+0

謝謝@Mark_M我真的很感激,你的代碼看起來很棒! – Jammi

相關問題