# keyBy > Convert a collection to an object whose keys are determined by a provided function and whose values are the collection values.
## Usage ```javascript var keyBy = require( '@stdlib/utils/key-by' ); ``` #### keyBy( collection, fcn\[, thisArg ] ) Converts a `collection` to an object whose keys are determined by a provided `function` and whose values are the `collection` values. ```javascript function toKey( value ) { return value.a; } var arr = [ { 'a': 1 }, { 'a': 2 } ]; var out = keyBy( arr, toKey ); // returns { '1': { 'a': 1 }, '2': { 'a': 2 } } ``` The invoked `function` is provided two arguments: - `value`: collection element - `index`: collection index To set the function execution context, provide a `thisArg`. ```javascript function toKey( value, index ) { this.sum += value; this.count += 1; return index; } var arr = [ 1, 2, 3, 4 ]; var context = { 'sum': 0, 'count': 0 }; var out = keyBy( arr, toKey, context ); // returns { '0': 1, '1': 2, '2': 3, '3': 4 } var mean = context.sum / context.count; // returns 2.5 ```
## Notes - A `collection` may be either an [`Array`][mdn-array], [`Typed Array`][mdn-typed-array], or an array-like [`Object`][mdn-object] (excluding `strings` and `functions`). - If more than one element in a `collection` resolves to the same key, the key value is the `collection` element which last resolved to the key. - Object values are shallow copies.
## Examples ```javascript var keyBy = require( '@stdlib/utils/key-by' ); var arr; var obj; var i; function toKey( value ) { return value.name; } arr = new Array( 100 ); for ( i = 0; i < arr.length; i++ ) { arr[ i ] = { 'name': 'v'+i, 'value': i }; } obj = keyBy( arr, toKey ); console.log( obj ); ```