徐总多门店
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

42 lines
1.0 KiB

var isEmpty = require('./isEmpty')
var isObject = require('./isObject')
var isFunction = require('./isFunction')
var property = require('./property')
var each = require('./each')
function createiterateEmpty (iterate) {
return function () {
return isEmpty(iterate)
}
}
/**
* 集合分组,默认使用键值分组,如果有iterate则使用结果进行分组
*
* @param {Array} obj 对象
* @param {Function} iterate 回调/对象属性
* @param {Object} context 上下文
* @return {Object}
*/
function groupBy (obj, iterate, context) {
var groupKey
var result = {}
if (obj) {
if (iterate && isObject(iterate)) {
iterate = createiterateEmpty(iterate)
} else if (!isFunction(iterate)) {
iterate = property(iterate)
}
each(obj, function (val, key) {
groupKey = iterate ? iterate.call(context, val, key, obj) : val
if (result[groupKey]) {
result[groupKey].push(val)
} else {
result[groupKey] = [val]
}
})
}
return result
}
module.exports = groupBy