|
7 | 7 | * Collect data into fixed-length chunks or blocks |
8 | 8 | */ |
9 | 9 |
|
10 | | -angular.module('a8m.chunk-by', []) |
11 | | - .filter('chunkBy', [function () { |
12 | | - /** |
13 | | - * @description |
14 | | - * Get array with size `n` in `val` inside it. |
15 | | - * @param n |
16 | | - * @param val |
17 | | - * @returns {Array} |
18 | | - */ |
19 | | - function fill(n, val) { |
20 | | - var ret = []; |
21 | | - while(n--) ret[n] = val; |
22 | | - return ret; |
23 | | - } |
| 10 | +angular.module('a8m.chunk-by', ['a8m.filter-watcher']) |
| 11 | + .filter('chunkBy', ['filterWatcher', function (filterWatcher) { |
| 12 | + return function (array, n, fillVal) { |
24 | 13 |
|
25 | | - return function (array, n, fillVal) { |
26 | | - if (!isArray(array)) return array; |
27 | | - return array.map(function(el, i, self) { |
28 | | - i = i * n; |
29 | | - el = self.slice(i, i + n); |
30 | | - return !isUndefined(fillVal) && el.length < n |
31 | | - ? el.concat(fill(n - el.length, fillVal)) |
32 | | - : el; |
33 | | - }).slice(0, Math.ceil(array.length / n)); |
34 | | - } |
35 | | - }]); |
| 14 | + return filterWatcher.isMemoized('chunkBy', arguments) || |
| 15 | + filterWatcher.memoize('chunkBy', arguments, this, |
| 16 | + _chunkBy(array, n, fillVal)); |
| 17 | + /** |
| 18 | + * @description |
| 19 | + * Get array with size `n` in `val` inside it. |
| 20 | + * @param n |
| 21 | + * @param val |
| 22 | + * @returns {Array} |
| 23 | + */ |
| 24 | + function fill(n, val) { |
| 25 | + var ret = []; |
| 26 | + while (n--) ret[n] = val; |
| 27 | + return ret; |
| 28 | + } |
| 29 | + |
| 30 | + function _chunkBy(array, n, fillVal) { |
| 31 | + if (!isArray(array)) return array; |
| 32 | + return array.map(function (el, i, self) { |
| 33 | + i = i * n; |
| 34 | + el = self.slice(i, i + n); |
| 35 | + return !isUndefined(fillVal) && el.length < n |
| 36 | + ? el.concat(fill(n - el.length, fillVal)) |
| 37 | + : el; |
| 38 | + }).slice(0, Math.ceil(array.length / n)); |
| 39 | + } |
| 40 | + } |
| 41 | + }]); |
0 commit comments