angular-filter
Version:
Bunch of useful filters for angularJS(with no external dependencies!)
45 lines (38 loc) • 1.13 kB
JavaScript
/**
* @ngdoc filter
* @name groupBy
* @kind function
*
* @description
* Create an object composed of keys generated from the result of running each element of a collection,
* each key is an array of the elements.
*/
angular.module('a8m.group-by', [ 'a8m.filter-watcher' ])
.filter('groupBy', [ '$parse', 'filterWatcher', function ( $parse, filterWatcher ) {
return function (collection, property) {
if(!isObject(collection) || isUndefined(property)) {
return collection;
}
return filterWatcher.isMemoized('groupBy', arguments) ||
filterWatcher.memoize('groupBy', arguments, this,
_groupBy(collection, $parse(property)));
/**
* groupBy function
* @param collection
* @param getter
* @returns {{}}
*/
function _groupBy(collection, getter) {
var result = {};
var prop;
forEach( collection, function( elm ) {
prop = getter(elm);
if(!result[prop]) {
result[prop] = [];
}
result[prop].push(elm);
});
return result;
}
}
}]);