HTML Preparation code:
AخA
 
1
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
Script Preparation code:
 
var arr = [];
var object = { 
    type: 'aaa',
    subtype: 'bbb',
    card_last4:'bbb',
    card_type:'bbb',
    card_exp_month:'bbb',
    card_exp_year:'bbb',
    card_country:'bbb',
    foo: 'bar'
};
for (var i = 0; i <= 100000; i++) { arr.push(object); }
Tests:
  • Lodash

     
    arr.map(function (element) {
        return _.pick(
            element,
            'type',
            'subtype',
            'card_last4',
            'card_type',
            'card_exp_month',
            'card_exp_year',
            'card_country',
            'something'
        );
    });
  • compiled pick function

    x
     
    const props = [
          "type",
          "subtype",
          "card_last4",
          "card_type",
          "card_exp_month",
          "card_exp_year",
          "card_country",
          "something"
    ];
    function pickBuilder(props) {
        const obj = props.map((prop) => `if (has.call(el, '${prop}')) res.${prop} = el.${prop}`).join(';');
        return new Function('el', `const has = Object.prototype.hasOwnProperty; const res = {}; ${obj}; return res;`);
    }
    const pick = pickBuilder(props)
    arr.map((element) => pick(element));
  • loop

     
     const has = Object.prototype.hasOwnProperty;
    const props = [
          "type",
          "subtype",
          "card_last4",
          "card_type",
          "card_exp_month",
          "card_exp_year",
          "card_country",
          "something"
    ];
    function pick(element, props) {
        const res = {};
      
        for (const prop of props) {
            if (has.call(element, prop)) res[prop] = element[prop];
        }
      
        return res;
    }
    arr.map((element) => pick(element, props));
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Lodash
    compiled pick function
    loop

    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/93.0.4577.82 Safari/537.36
Chrome 93 on Mac OS X 10.15.7
View result in a separate tab
Test name Executions per second
Lodash 3.8 Ops/sec
compiled pick function 60.7 Ops/sec
loop 25.1 Ops/sec