HTML Preparation code:
x
 
1
2
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js'></script>
Script Preparation code:
 
var data = [{
        name: 'pi',
        value: 3.14
    },
    {
        name: 'hundred',
        value: 100
    },
    {
        name: 'truthy',
        value: true
    },
    {
        name: 'falsy',
        value: false
    },
    {
        name: 'estring',
        value: '2.71828'
    },
];
var keyBy = (array, fn) => {
    return array.reduce((acc, value) => {
        acc[fn(value)] = value;
        return acc;
    }, {});
};
var keyBySpread = (array, fn) => {
    return array.reduce((acc, value) => ({
        ...acc,
        [fn(value)]: value
    }), {});
};
var keyByForEach = (array, fn) => {
    var acc = {};
    _.forEach(array, (value) => {
        acc[fn(value)] = value;
    });
    return acc;
};
var keyByForLoop = (array, fn) => {
    var acc = {};
    for (let i = 0; i < array.length; i++) {
        acc[fn(array[i])] = array[i];
    }
    return acc;
};
Tests:
  • lodash/keyBy

     
    _.keyBy(data, (v) => v.name);
  • keyBy with native reduce

     
    keyBy(data, (v) => v.name);
  • keyBy with forEach

     
    keyByForEach(data, (v) => v.name);
  • keyBy with for loop

     
    keyByForLoop(data, (v) => v.name);
  • KeyBy with spread operator

     
    keyBySpread(data, (v) => v.name);
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    lodash/keyBy
    keyBy with native reduce
    keyBy with forEach
    keyBy with for loop
    KeyBy with spread operator

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 3 years ago)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Chrome 95 on Mac OS X 10.15.7
View result in a separate tab
Test name Executions per second
lodash/keyBy 3147518.0 Ops/sec
keyBy with native reduce 4158269.8 Ops/sec
keyBy with forEach 2327895.5 Ops/sec
keyBy with for loop 4388728.0 Ops/sec
KeyBy with spread operator 949298.6 Ops/sec