| import baseAssignValue from './.internal/baseAssignValue.js' | |
| import reduce from './reduce.js' | |
| /** | |
| * 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 last element responsible for generating the key. The | |
| * iteratee is invoked with one argument: (value). | |
| * | |
| * @since 4.0.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. | |
| * @see groupBy, partition | |
| * @example | |
| * | |
| * const array = [ | |
| * { 'dir': 'left', 'code': 97 }, | |
| * { 'dir': 'right', 'code': 100 } | |
| * ] | |
| * | |
| * keyBy(array, ({ code }) => String.fromCharCode(code)) | |
| * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } | |
| */ | |
| function keyBy(collection, iteratee) { | |
| return reduce(collection, (result, value, key) => ( | |
| baseAssignValue(result, iteratee(value), value), result | |
| ), {}) | |
| } | |
| export default keyBy |