Immutable | var commits = immutableCommits;
var groupedByAuthors = commits.groupBy(function(c) {
return c.getIn(['commit', 'author', 'email']);
});
var sortedAuthors = groupedByAuthors.keySeq().sort();
var result = sortedAuthors.reduce(function(acc, author) {
var groupedByHours = groupedByAuthors.get(author).groupBy(function(c) {
var date = new Date(c.getIn(['commit', 'author', 'date']));
date.setMinutes(0);
return date.toISOString();
});
var sortedHours = groupedByHours.keySeq().sort().reverse();
var groupedAndSortedByHours = sortedHours.reduce(function(acc, hour) {
var commits = groupedByHours.get(hour);
var sortedByTime = commits.sortBy(function(c) {
return c.getIn(['commit', 'author', 'date']);
}).reverse();
return acc.set(hour, sortedByTime);
}, Immutable.OrderedMap());
return acc.set(author, groupedAndSortedByHours);
}, Immutable.OrderedMap());
var resultInJS = result.toJS();
| ready |
mori |
var groupedByAuthors = mori.groupBy(function(c) {
return mori.getIn(c, ['commit', 'author', 'email']);
}, moriCommits);
var sortedAuthors = mori.sort(mori.keys(groupedByAuthors));
var result = mori.reduce(function(acc, author) {
var groupedByHours = mori.groupBy(function(c) {
var date = new Date(mori.getIn(c, ['commit', 'author', 'date']));
date.setMinutes(0);
return date.toISOString();
}, mori.get(groupedByAuthors, author));
var sortedHours = mori.reverse(mori.sort(mori.keys(groupedByHours)));
var groupedAndSortedByHours = mori.reduce(function(acc, hour) {
var commits = mori.get(groupedByHours, hour);
var sortedByTime = mori.reverse(mori.sortBy(function(c) {
return mori.getIn(c, ['commit', 'author', 'date']);
}, commits));
return mori.conj(acc, mori.vector(hour, sortedByTime))
}, mori.vector(), sortedHours);
return mori.conj(acc, mori.vector(author, groupedAndSortedByHours));
}, mori.vector(), sortedAuthors);
var resultInJS = mori.toJs(result);
| ready |