keyBy

Convert a collection to an object whose keys are determined by a provided function and whose values are the collection values.

Usage

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.

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.

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, Typed Array, or an array-like 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

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 );