collection/countBy.jsjavascript
import { entries, toIteratee } from '../_internal/iteratee'

/**
 * 按 iteratee 结果统计集合元素数量。
 * @function countBy
 * @memberof module:collection
 * @param {Array|Object} collection 要遍历的集合
 * @param {Function|string|number|Array|Object} [iteratee] 判断函数或简写
 * @returns {Object} 键为分组值、值为计数的对象
 * @throws {TypeError} 集合或 iteratee 类型不正确时抛出
 */
function countBy(collection, iteratee) {
  const fn = toIteratee(iteratee)
  return entries(collection).reduce((result, [key, value]) => {
    const group = String(fn(value, key, collection))
    result[group] = (result[group] ?? 0) + 1
    return result
  }, {})
}

export default countBy