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.group_by(function(c) {
return mori.get_in(c, ['commit', 'author', 'email']);
}, moriCommits);
var sortedAuthors = mori.sort(mori.keys(groupedByAuthors));
var result = mori.reduce(function(acc, author) {
var groupedByHours = mori.group_by(function(c) {
var date = new Date(mori.get_in(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.sort_by(function(c) {
return mori.get_in(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.clj_to_js(result);
| ready |
Plain JS (optimized) | var i, j, k;
var groupedByAuthors = {}, c, email;
for (i = 0; i < commitsOrigin.length; i++) {
c = commitsOrigin[i];
email = c.commit.author.email;
(groupedByAuthors[email] || (groupedByAuthors[email] = [])).push(c);
}
var sortedAuthors = Object.keys(groupedByAuthors).sort();
var result = {}, author;
for (i = 0; i < sortedAuthors.length; i++) {
author = sortedAuthors[i];
var groupedByHours = {};
var authorCommits = groupedByAuthors[author];
for (j = 0; j < authorCommits.length; j++) {
c = authorCommits[j];
var date = new Date(c.commit.author.date);
date.setMinutes(0);
var hour = date.toISOString();
(groupedByHours[hour] || (groupedByHours[hour] = [])).push(c);
}
var sortedHours = Object.keys(groupedByHours).sort().reverse();
var groupedAndSortedByHours = {}, hour;
for (j = 0; j < sortedHours.length; j++) {
hour = sortedHours[j];
var commits = [];
var hourCommits = groupedByHours[hour],
c;
for (k = 0; k < hourCommits.length; k++) {
c = hourCommits[k];
commits.push(c);
}
var sortedByTime = commits.sort(function(a, b) {
return a.commit.author.date > a.commit.author.date ? -1 : 1;
});
groupedAndSortedByHours[hour] = sortedByTime;
};
result[author] = groupedAndSortedByHours;
};
| ready |