UNPKG

1.09 kBJavaScriptView Raw
1var isEmpty = require('./isEmpty')
2var isObject = require('./isObject')
3var isFunction = require('./isFunction')
4var property = require('./property')
5var each = require('./each')
6
7function createiterateEmpty (iterate) {
8 return function () {
9 return isEmpty(iterate)
10 }
11}
12
13/**
14 * 集合分组,默认使用键值分组,如果有iterate则使用结果进行分组
15 *
16 * @param {Array} obj 对象
17 * @param {Function} iterate 回调/对象属性
18 * @param {Object} context 上下文
19 * @return {Object}
20 */
21function 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
42module.exports = groupBy