Skip to content

Commit d80077e

Browse files
committed
Consolidate aggregate modules.
1 parent 3b4cbc7 commit d80077e

File tree

7 files changed

+36
-93
lines changed

7 files changed

+36
-93
lines changed

.internal/arrayAggregator.js

Lines changed: 0 additions & 22 deletions
This file was deleted.

.internal/baseAggregator.js

Lines changed: 0 additions & 21 deletions
This file was deleted.

.internal/createAggregator.js

Lines changed: 0 additions & 20 deletions
This file was deleted.

countBy.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import baseAssignValue from './.internal/baseAssignValue.js';
2-
import createAggregator from './.internal/createAggregator.js';
2+
import reduce from './reduce.js';
33

44
/** Used to check objects for own properties. */
55
const hasOwnProperty = Object.prototype.hasOwnProperty;
@@ -20,12 +20,15 @@ const hasOwnProperty = Object.prototype.hasOwnProperty;
2020
* countBy([6.1, 4.2, 6.3], Math.floor);
2121
* // => { '4': 1, '6': 2 }
2222
*/
23-
const countBy = createAggregator((result, value, key) => {
24-
if (hasOwnProperty.call(result, key)) {
25-
++result[key];
26-
} else {
27-
baseAssignValue(result, key, 1);
28-
}
29-
});
23+
function countBy(collection, iteratee) {
24+
return reduce(collection, (result, value, key) => {
25+
if (hasOwnProperty.call(result, key)) {
26+
++result[key];
27+
} else {
28+
baseAssignValue(result, key, 1);
29+
}
30+
return result;
31+
}, {});
32+
}
3033

3134
export default countBy;

groupBy.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import baseAssignValue from './.internal/baseAssignValue.js';
2-
import createAggregator from './.internal/createAggregator.js';
2+
import reduce from './reduce.js';
33

44
/** Used to check objects for own properties. */
55
const hasOwnProperty = Object.prototype.hasOwnProperty;
@@ -21,12 +21,15 @@ const hasOwnProperty = Object.prototype.hasOwnProperty;
2121
* groupBy([6.1, 4.2, 6.3], Math.floor);
2222
* // => { '4': [4.2], '6': [6.1, 6.3] }
2323
*/
24-
const groupBy = createAggregator((result, value, key) => {
25-
if (hasOwnProperty.call(result, key)) {
26-
result[key].push(value);
27-
} else {
28-
baseAssignValue(result, key, [value]);
29-
}
30-
});
24+
function groupBy(collection, iteratee) {
25+
return reduce(collection, (result, value, key) => {
26+
if (hasOwnProperty.call(result, key)) {
27+
result[key].push(value);
28+
} else {
29+
baseAssignValue(result, key, [value]);
30+
}
31+
return result;
32+
}, {});
33+
}
3134

3235
export default groupBy;

keyBy.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import baseAssignValue from './.internal/baseAssignValue.js';
2-
import createAggregator from './.internal/createAggregator.js';
2+
import reduce from './reduce.js';
33

44
/**
55
* Creates an object composed of keys generated from the results of running
@@ -19,16 +19,13 @@ import createAggregator from './.internal/createAggregator.js';
1919
* { 'dir': 'right', 'code': 100 }
2020
* ];
2121
*
22-
* keyBy(array, function(o) {
23-
* return String.fromCharCode(o.code);
24-
* });
22+
* keyBy(array, ({ code }) => String.fromCharCode(code));
2523
* // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
26-
*
27-
* keyBy(array, 'dir');
28-
* // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
2924
*/
30-
const keyBy = createAggregator((result, value, key) => {
31-
baseAssignValue(result, key, value);
32-
});
25+
function keyBy(collection, iteratee) {
26+
return reduce(collection, (result, value, key) => (
27+
baseAssignValue(result, key, value)
28+
), {});
29+
}
3330

3431
export default keyBy;

partition.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import createAggregator from './.internal/createAggregator.js';
1+
import reduce from './reduce.js';
22

33
/**
44
* Creates an array of elements split into two groups, the first of which
@@ -19,10 +19,13 @@ import createAggregator from './.internal/createAggregator.js';
1919
* { 'user': 'pebbles', 'age': 1, 'active': false }
2020
* ];
2121
*
22-
* partition(users, o => o.active);
22+
* partition(users, ({ active }) => active);
2323
* // => objects for [['fred'], ['barney', 'pebbles']]
2424
*/
25-
const partition = createAggregator((result, value, key) =>
26-
result[key ? 0 : 1].push(value), () => [[], []]);
25+
function partition(collection, predicate) {
26+
return reduce(collection, (result, value, key) => (
27+
result[key ? 0 : 1].push(value)
28+
), [[], []]);
29+
}
2730

2831
export default partition;

0 commit comments

Comments
 (0)