2017-01-31 6 views
1

Ich Gruppierung meine Array mit dieser Funktion:Gruppe Array mit groupBy

Array.prototype.groupBy = function(prop) { 
      return this.reduce(function(groups, item) { 
      var val = item[prop]; 
      groups[val] = groups[val] || []; 
      groups[val].push(item); 
      return groups; 
      }, {}); 
     } 

ich es in einer anderen Funktion verwenden, in denen ich das Datum erhalten

vm.parkings.forEach(function(value, key) { 
     value.receiptsByDate = []; 
     if (value.receipts != undefined) { 
      value.receipts.forEach(function(rcpts) { 
        var date = rcpts.date.split('/'); 
        var newDate = date[2] + '/' + date[0]; 
        var year = date[2]; 
        var month = date[0]; 
        var price = rcpts.value; 
        value.receiptsByDate.push({newDate, price, month, year}); 
        value.newReceipt = value.receiptsByDate.groupBy('month'); 
      }) 
     } 
    }) 

Ergebnis:

Result

In meinem newReceipt ich habe die von Monat sortierten Objekte, ok.

würde Ich mag die Preise summieren Monat nach. Beispiel: innerhalb Array drei, auf die Objekte zugreifen und die aktuellen Preise summieren.

Ist dies der beste Weg?

EDIT

Ich habe den Unterstrich und es funktioniert verwendet. Es sieht wie folgt aus:

var result = _.groupBy(receiptsByDate, "month"); 
var out = _(result).map(function(g, key) { 
    return {month: key, price: _(g).reduce(function(m, x){return m + x.price}, 0)} 
}) 
+0

Betrachten lodash mit (lodash.com) Algorithmen zu tun –

+0

Ich werde versuchen, dies zu tun –

Antwort

0

linq.js Bibliothek Versuchen:

var res = Enumerable.From([ 
 
    {date: new Date(), price: 10}, 
 
    {date: new Date(), price: 20}, 
 
    {date: new Date(2014, 15, 4), price: 30}, 
 
    {date: new Date(2014, 15, 4), price: 40}, 
 
    {date: new Date(2014, 15, 4), price: 50} 
 
]).GroupBy("$.date.getMonth() + 1", null, function (key, gr) { 
 
    var temp = { 
 
      month: key, 
 
      totalPrice: gr.Sum("$.price") 
 
    }; 
 
    console.log(temp); 
 
    return temp; 
 
}).ToArray();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="http://neue.cc/linq.min.js"></script>

+0

Danke sowieso –