Convenience function for performing a groupBy
on a list then a sortBy
on the resulting groups using Underscore methods.
sortedGroupBy(list, groupByIterator, sortByIterator)
Convenience function for performing a groupBy
on a list then a sortBy
on the resulting groups using Underscore methods.
sortedGroupBy(list, groupByIterator, sortByIterator)
sortedGroupBy = (list, groupByIter, sortByIter) -> | |
# Pass in an array to group by multiple object keys | |
if _.isArray(groupByIter) | |
groupBy = (obj) -> | |
_.map groupByIter, (key, value) -> obj[key] | |
else | |
groupBy = groupByIter | |
# Pass in an array to sort by multiple object keys | |
if _.isArray(sortByIter) | |
sortBy = (obj) -> | |
_.map sortByIter, (key, value) -> obj[key] | |
else | |
sortBy = sortByIter | |
groups = _.groupBy(list, groupBy) | |
_.each groups, (value, key, list) -> | |
list[key] = _.sortBy(value, sortBy) | |
return groups |
function sortedGroupBy(list, groupByIter, sortByIter) { | |
if (_.isArray(groupByIter)) { | |
function groupBy(obj) { | |
return _.map(groupByIter, function(key, value) { | |
return obj[key]; | |
}); | |
} | |
} else { | |
var groupBy = groupByIter; | |
} | |
if (_.isArray(sortByIter)) { | |
function sortBy(obj) { | |
return _.map(sortByIter, function(key, value) { | |
return obj[key]; | |
}); | |
} | |
} else { | |
var sortBy = sortByIter; | |
} | |
var groups = _.groupBy(list, groupBy); | |
_.each(groups, function(value, key, list) { | |
list[key] = _.sortBy(value, sortBy); | |
}); | |
return groups; | |
} |