Я работаю с underscorejs в проекте. Мне нужно делать различные типы операций массива, такие как map, reduce, filter groupby.Javascript - underscorejs map уменьшить группу по дате
Мой набор данных выглядит следующим образом:
var data_list = [
{"insertDate": "2011-12-02T00:00","value": {"paisa":10000}},
{"insertDate": "2013-03-02T00:00","value": {"paisa":10000}
},{"insertDate": "2013-03-02T00:00","value": {"paisa":10000}
},{"insertDate": "2012-12-02T00:00","value": {"paisa":30000}},
{"insertDate": "2013-04-02T00:00","value": {"paisa":10000},
},{"insertDate": "2013-04-02T00:00","value": {"paisa":30000}
},{"insertDate": "2013-03-02T00:00","value": {"paisa":20000}},
{"insertDate": "2013-04-12T00:00","value": {"paisa":30000}
},
{"insertDate": "2012-11-02T00:00","value": {"paisa":10000}}
]
Я хочу расчетными данными, основанными на день, месяц и год. Для расчета дня я делаю groupby, а затем использую карту для вычисления. Как показано ниже:
var groupedByDateData = _.groupBy(data_list, "insertDate");
var aggregateByDate = _.map(groupedByDateData, function(invoiceObject, createdat) {
return {
createdat: createdat,
val: _.reduce(invoiceObject, function(m,x) {
return m + x.value.paisa;
}, 0)
};
});
Его работает отлично на день карты на основе снижения, но за месяц и год расчета я хочу сделать в таком же формате, что и код читаемым.
Как я могу сделать карту, уменьшить с помощью underscorejs, так что я могу получить данные, как показано ниже: Для ежемесячного расчета:
[{"createdat": "February 2011", "val": 10000},
{"createdat": "March 2013", "val": 40000},
{"createdat": "December 2012", "val": 30000},
{"createdat": "April 2013", "val": 70000},
{"createdat": "November 2012", "val": 10000}]
Для ежегодного MapReduce:
[{"createdat": "2011", "val": 10000},
{"createdat": "2013", "val": 110000},
{"createdat": "2012", "val": 70000}]
Мой код JSBIN здесь
NB: Для получения ежегодного и ежемесячного сокращенного набора результатов я разделяю дату, но это не лучше всего делать. проверить мое решение здесь http://jsbin.com/etepan/3/edit
Заранее спасибо.
Я сделал это, прежде чем отправил проверить его здесь http://jsbin.com/etepan/3/edit, но "item.insertDate.substring (0,4);" Кажется нехорошо, я сделал то же самое, что и obj.insertDate.split ('-') [0], что тоже нечетно. – mushfiq
Для синтаксического анализа даты, я обычно использую moment.js, потому что он имеет разумный API и красиво оформляет даты. Вы можете использовать его в возвращаемом значении функции 'aggregateByDate' (вместо того, чтобы выплескивать' createdat' как есть. – burin