Run details:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 Edg/87.0.664.41
Chrome 87
Windows
Desktop
4 years ago
Test name Executions per second
destructuring with defaults, empty input 8125190.0 Ops/sec
lodash get, empty input 2153390.8 Ops/sec
destructuring with defaults, find item 2554996.8 Ops/sec
lodash get, find item 1329983.6 Ops/sec
destructuring dynamic key 2557449.0 Ops/sec
lodash dynamic key 924501.2 Ops/sec
lodash dynamic key using array 1627423.1 Ops/sec
lodash dynamic key using manually cached array 1658215.0 Ops/sec
HTML Preparation code:
AخA
 
1
<script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script>
Script Preparation code:
x
 
function destructuringFn(input) {
  const { contextMenu: { data: { documents = [] } = {} } = {} } = input;
  return documents;
}
function destructuringFnDynamic(input, key) {
  const { contextMenu: { data: { [key]: documents = [] } = {} } = {} } = input;
  return documents;
}
function lodashFn(input) {
  const documents = _.get(input, 'contextMenu.data.documents', []);
  return documents;
}
function lodashFnDynamic(input, key) {
  const documents = _.get(input, `contextMenu.data.${key}`, []);
  return documents;
}
function lodashFnDynamicArray(input, key) {
  const documents = _.get(input, ['contextMenu', 'data', 'key'], []);
  return documents;
}
let paths = {};
function lodashFnDynamicCachedArray(input, key) {
  paths[key] = paths[key] || _.toPath(`contextMenu.data.${key}`);
  const documents = _.get(input, paths[key], []);
  return documents;
}
function test(fn, input, key) {
  fn(input, key);
}
Tests:
  • destructuring with defaults, empty input

     
    test(destructuringFn, {});
  • lodash get, empty input

     
    test(lodashFn, {});
  • destructuring with defaults, find item

     
    const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } };
    test(destructuringFn, input);
  • lodash get, find item

     
    const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } };
    test(lodashFn, input);
  • destructuring dynamic key

     
    const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } };
    test(destructuringFn, input, 'documents');
  • lodash dynamic key

     
    const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } };
    test(lodashFnDynamic, input, 'documents');
  • lodash dynamic key using array

     
    const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } };
    test(lodashFnDynamicArray, input, 'documents');
  • lodash dynamic key using manually cached array

     
    const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } };
    test(lodashFnDynamicCachedArray, input, 'documents');