2017-01-31 8 views
1

Я группируя мой массив, используя эту функцию:массив Group с группеПо

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; 
      }, {}); 
     } 

я использую его в другой функции, где я получить дату

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'); 
      }) 
     } 
    }) 

Результат:

Result

В моем newReceipt у меня есть объекты, отсортированные по месяцам, нормально.

Я хотел бы рассчитать цены в зависимости от месяца. Пример: внутри массива три, доступ к объектам и суммирование цен.

Это лучший способ сделать это?

EDIT

Я использовал подчеркивание, и это работает. Это выглядит следующим образом:

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

Рассмотрим с помощью lodash (lodash.com), чтобы сделать алгоритмы –

+0

я постараюсь сделать это –

ответ

0

linq.js Попробуйте библиотеку:

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

Спасибо так или иначе –

 Смежные вопросы

  • Нет связанных вопросов^_^