1 | var isEmpty = require('./isEmpty')
|
2 | var isObject = require('./isObject')
|
3 | var isFunction = require('./isFunction')
|
4 | var property = require('./property')
|
5 | var each = require('./each')
|
6 |
|
7 | function createiterateEmpty (iterate) {
|
8 | return function () {
|
9 | return isEmpty(iterate)
|
10 | }
|
11 | }
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | function groupBy (obj, iterate, context) {
|
22 | var groupKey
|
23 | var result = {}
|
24 | if (obj) {
|
25 | if (iterate && isObject(iterate)) {
|
26 | iterate = createiterateEmpty(iterate)
|
27 | } else if (!isFunction(iterate)) {
|
28 | iterate = property(iterate)
|
29 | }
|
30 | each(obj, function (val, key) {
|
31 | groupKey = iterate ? iterate.call(context, val, key, obj) : val
|
32 | if (result[groupKey]) {
|
33 | result[groupKey].push(val)
|
34 | } else {
|
35 | result[groupKey] = [val]
|
36 | }
|
37 | })
|
38 | }
|
39 | return result
|
40 | }
|
41 |
|
42 | module.exports = groupBy
|