У меня есть массив данных, как следующие, отсортированных по месяцам по возрастанию:Underscore.js: Фильтровать массив объектов, а затем сортировать в среднем?
[{
org_id: "K83002",
percentile: 1,
date: "2013-11-01",
},
{
org_id: "K83059",
percentile: 33,
date: "2013-12-01",
},
{
org_id: "K83607",
percentile: 22,
date: "2013-12-01",
} ...
Я хочу, чтобы создать упорядоченный список организаций, ранжированный по их средней процентиль позиции в течение последних трех месяцев в данных.
Прямо сейчас, я это делаю:
var lastThreeMonths = _.uniq(_.pluck(data, 'date'), true).slice(-3);
var averages = {};
var lastMonths = _.each(data, function(d) {
if (_.contains(lastThreeMonths, d.date)) {
if (d.org_id in averages) {
averages[d.org_id] += d.percentile;
} else {
averages[d.org_id] = d.percentile;
}
}
});
var temp = [];
for (var k in averages) {
temp.push({ 'org_id': k, 'percentile': averages[k]});
}
var sortedAvgs = _.sortBy(temp, 'percentile').reverse();
Но это очень многословны. Есть ли лучший способ сделать это?
В идеале я также хотел бы приложить необработанные данные для каждой организации отсортированным массивом, так как я буду перебирать отсортированный массив рядом, и было бы удобно получить доступ к данным внутри этого итератора.
Вы можете показать немного больше входного и что выход он должен генерировать? – Amit