Plain JS v5 |
var groupedByAuthors = {};
commitsOrigin.forEach(function (c)
{
var email = c.commit.author.email;
(groupedByAuthors[email] || (groupedByAuthors[email] = [])).push(c);
});
var sortedAuthors = Object.keys(groupedByAuthors).sort();
var result = {};
sortedAuthors.forEach(function (author)
{
var groupedByHours = {};
groupedByAuthors[author].forEach(function (c)
{
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 = {};
sortedHours.forEach(function (hour)
{
var commits = groupedByHours[hour];
var sortedByTime = commits.sort(function (a, b)
{
return a.commit.author.date > b.commit.author.date ? -1 : 1;
});
groupedAndSortedByHours[hour] = sortedByTime;
});
result[author] = groupedAndSortedByHours;
});
| ready |
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 |
lodash |
var groupedByAuthors = _l.groupBy(commitsOrigin, function (c)
{
return c.commit.author.email;
});
var sortedAuthors = _l.chain(groupedByAuthors).keys().sortBy().value();
var result = _l.reduce(sortedAuthors, function (authorAccumulator, author)
{
var groupedByHours = _l.groupBy(groupedByAuthors[author], function (c)
{
var date = new Date(c.commit.author.date);
date.setMinutes(0);
return date.toISOString();
});
var sortedHours = _l.chain(groupedByHours).keys().sortBy().reverse().value();
var groupedAndSortedByHours = _l.reduce(sortedHours, function (hourAccumulator, hour)
{
var commits = groupedByHours[hour];
var sortedByTime = _l.sortBy(commits, function (c)
{
return c.commit.author.date;
}).reverse();
hourAccumulator[hour] = sortedByTime;
return hourAccumulator;
}, {});
authorAccumulator[author] = groupedAndSortedByHours;
return authorAccumulator;
}, {});
| ready |
underscore |
var groupedByAuthors = _u.groupBy(commitsOrigin, function (c)
{
return c.commit.author.email;
});
var sortedAuthors = _u.chain(groupedByAuthors).keys().sortBy().value();
var result = _u.reduce(sortedAuthors, function (authorAccumulator, author)
{
var groupedByHours = _u.groupBy(groupedByAuthors[author], function (c)
{
var date = new Date(c.commit.author.date);
date.setMinutes(0);
return date.toISOString();
});
var sortedHours = _u.chain(groupedByHours).keys().sortBy().reverse().value();
var groupedAndSortedByHours = _u.reduce(sortedHours, function (hourAccumulator, hour)
{
var commits = groupedByHours[hour];
var sortedByTime = _u.sortBy(commits, function (c)
{
return c.commit.author.date;
}).reverse();
hourAccumulator[hour] = sortedByTime;
return hourAccumulator;
}, {});
authorAccumulator[author] = groupedAndSortedByHours;
return authorAccumulator;
}, {});
| ready |
Plain JS v3 |
var i, j, k, lenI, lenJ, lenK, c;
var email, author, hour, date;
var groupedByAuthors = {};
for (i = 0, lenI = commitsOrigin.length; i < lenI; i++)
{
c = commitsOrigin[i];
email = c.commit.author.email;
(groupedByAuthors[email] || (groupedByAuthors[email] = [])).push(c);
}
var sortedAuthors = [];
for (author in groupedByAuthors)
{
if (groupedByAuthors.hasOwnProperty(author))
{
sortedAuthors.push(author);
}
}
sortedAuthors.sort();
var result = {};
for (i = 0, lenI = sortedAuthors.length; i < lenI; i++)
{
var author = sortedAuthors[i];
var groupedByHours = {};
var commits = groupedByAuthors[author];
for (j = 0, lenJ = commits.length; j < lenJ; j++)
{
c = commits[j];
date = new Date(c.commit.author.date);
date.setMinutes(0);
hour = date.toISOString();
(groupedByHours[hour] || (groupedByHours[hour] = [])).push(c);
}
var sortedHours = [];
for (hour in groupedByHours)
{
if (groupedByHours.hasOwnProperty(hour))
{
sortedHours.push(hour);
}
}
sortedHours.sort().reverse();
var groupedAndSortedByHours = {}, groupedCommits, sortedByTime;
for (j = 0, lenJ = sortedHours.length; j < lenJ; j++)
{
hour = sortedHours[j];
commits = groupedByHours[hour];
sortedByTime = commits.sort(function(a, b)
{
return a.commit.author.date > b.commit.author.date ? -1 : 1;
});
groupedAndSortedByHours[hour] = sortedByTime;
}
result[author] = groupedAndSortedByHours;
}
| ready |
Ramda |
var groupedByAuthors = R.groupBy(function (c)
{
return c.commit.author.email;
}, commitsOrigin);
var keySorter = R.pipe(R.keys(), R.sort(R._))
var sortedAuthors = keySorter(groupedByAuthors);
var result = R.reduce(function (authorAccumulator, author)
{
var groupedByHours = R.groupBy(function (c)
{
var date = new Date(c.commit.author.date);
date.setMinutes(0);
return date.toISOString();
}, groupedByAuthors[author]);
var sortedHours = R.reverse(keySorter(groupedByHours));
var groupedAndSortedByHours = R.reduce(function (hourAccumulator, hour)
{
var commits = groupedByHours[hour];
var sortedByTime = R.reverse(R.sort(function (c)
{
return c.commit.author.date;
}, commits));
hourAccumulator[hour] = sortedByTime;
return hourAccumulator;
}, {}, sortedHours);
authorAccumulator[author] = groupedAndSortedByHours;
return authorAccumulator;
}, {}, sortedAuthors);
| ready |
Functional JS 5 |
var groupedByAuthors = {};
commitsOrigin.forEach(function (c)
{
var email = c.commit.author.email;
(groupedByAuthors[email] || (groupedByAuthors[email] = [])).push(c);
});
var sortedAuthors = Object.keys(groupedByAuthors).sort();
var result = sortedAuthors.reduce(function (authorAccumulator, author)
{
var groupedByHours = {};
groupedByAuthors[author].forEach(function (c)
{
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 = sortedHours.reduce(function (hourAccumulator, hour)
{
var commits = groupedByHours[hour];
var sortedByTime = commits.sort(function (a, b)
{
return a.commit.author.date > b.commit.author.date ? -1 : 1;
});
hourAccumulator[hour] = sortedByTime;
return hourAccumulator;
}, {});
authorAccumulator[author] = groupedAndSortedByHours;
return authorAccumulator;
}, {});
| ready |