2017-09-02 3 views
0

私の目標は"配列の総数"を配列内で見つけることです。私の2つの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

削減は、このために最適です:

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

関連する問題