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());
| 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);
| 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 |
Lodash | var groupedByAuthors, reduceIterator, result, sortedAuthors;
groupedByAuthors = _.groupBy(commitsOrigin, function(c) {
return c.commit.author.email;
});
sortedAuthors = _.keys(groupedByAuthors).sort();
reduceIterator = function(acc, author) {
var groupedAndSortedByHours, groupedByHours, iterator, sortedHours;
groupedByHours = _.groupBy(groupedByAuthors[author], function(c) {
var date;
date = new Date(c.commit.author.date);
date.setMinutes(0);
return date.toISOString();
});
sortedHours = _.keys(groupedByHours).sort().reverse();
iterator = function(acc, hour) {
var commits, sortedByTime;
commits = groupedByHours[hour];
sortedByTime = _.sortBy(commits, function(c) {
return c.commit.author.date;
}).reverse();
return acc[hour] = sortedByTime;
};
return groupedAndSortedByHours = _.reduce(sortedHours, iterator, {});
};
result = _.reduce(sortedAuthors, reduceIterator, {});
| ready |