Test name | Executions per second |
---|---|
Lodash | 2.9 Ops/sec |
compiled pick function | 36.8 Ops/sec |
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
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); }
arr.map(function (element) {
return _.pick(
element,
'type',
'subtype',
'card_last4',
'card_type',
'card_exp_month',
'card_exp_year',
'card_country',
'something'
);
});
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));