angular-filter
Version:
Bunch of useful filters for angularJS(with no external dependencies!)
42 lines (38 loc) • 1.19 kB
JavaScript
/**
* @ngdoc filter
* @name chunkBy
* @kind function
*
* @description
* Collect data into fixed-length chunks or blocks
*/
angular.module('a8m.chunk-by', ['a8m.filter-watcher'])
.filter('chunkBy', ['filterWatcher', function (filterWatcher) {
return function (array, n, fillVal) {
return filterWatcher.isMemoized('chunkBy', arguments) ||
filterWatcher.memoize('chunkBy', arguments, this,
_chunkBy(array, n, fillVal));
/**
* @description
* Get array with size `n` in `val` inside it.
* @param n
* @param val
* @returns {Array}
*/
function fill(n, val) {
var ret = [];
while (n--) ret[n] = val;
return ret;
}
function _chunkBy(array, n, fillVal) {
if (!isArray(array)) return array;
return array.map(function (el, i, self) {
i = i * n;
el = self.slice(i, i + n);
return !isUndefined(fillVal) && el.length < n
? el.concat(fill(n - el.length, fillVal))
: el;
}).slice(0, Math.ceil(array.length / n));
}
}
}]);