The Wayback Machine - https://web.archive.org/web/20170626173142/https://github.com/lodash/lodash/blob/master/countBy.js
Skip to content
Permalink
1e8ac50 Feb 23, 2017
@jdalton @falsyvalues
36 lines (32 sloc) 1.07 KB
import baseAssignValue from './.internal/baseAssignValue.js'
import reduce from './reduce.js'
/** Used to check objects for own properties. */
const hasOwnProperty = Object.prototype.hasOwnProperty
/**
* Creates an object composed of keys generated from the results of running
* each element of `collection` thru `iteratee`. The corresponding value of
* each key is the number of times the key was returned by `iteratee`. The
* iteratee is invoked with one argument: (value).
*
* @since 0.5.0
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} iteratee The iteratee to transform keys.
* @returns {Object} Returns the composed aggregate object.
* @example
*
* countBy([6.1, 4.2, 6.3], Math.floor)
* // => { '4': 1, '6': 2 }
*/
function countBy(collection, iteratee) {
return reduce(collection, (result, value, key) => {
key = iteratee(value)
if (hasOwnProperty.call(result, key)) {
++result[key]
} else {
baseAssignValue(result, key, 1)
}
return result
}, {})
}
export default countBy
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.