Skip to content

Instantly share code, notes, and snippets.

@stephengfriend
Created July 15, 2020 18:45
Show Gist options
  • Select an option

  • Save stephengfriend/bd384afaf0de20bf8eb65a3c592f73a1 to your computer and use it in GitHub Desktop.

Select an option

Save stephengfriend/bd384afaf0de20bf8eb65a3c592f73a1 to your computer and use it in GitHub Desktop.
Simple comparison of omit and pick patterns for performance curiosity
const assert = require('assert');
function fnc() {
assert.deepEqual(arguments?.[0], { 'c': 3 })
assert.deepEqual(arguments?.[1], { 'a': 1, 'b': '2' })
assert.ok(arguments?.[2] === 3, '!= 3')
assert.ok(arguments?.[3] === 5, '!= 5')
}
const object = { 'a': 1, 'b': '2', 'c': 3 };
const start = process.hrtime();
for (let i = 0; i < 100000; i++) {
fnc(
Object.keys(object)
.filter(k => !['a', 'b'].includes(k))
.reduce((result, k) => ({ [k]: object[k], ...result }), {}),
{ a: object.a, b: object.b },
3,
5,
);
}
console.log(process.hrtime(start));
const assert = require('assert');
const omit = require('lodash/omit');
const pick = require('lodash/pick');
function fnc() {
assert.deepEqual(arguments?.[0], { 'c': 3 })
assert.deepEqual(arguments?.[1], { 'a': 1, 'b': '2' })
assert.ok(arguments?.[2] === 3, '!= 3')
assert.ok(arguments?.[3] === 5, '!= 5')
}
const object = { 'a': 1, 'b': '2', 'c': 3 };
const start = process.hrtime();
for (let i = 0; i < 100000; i++) {
fnc(
omit(object, ['a', 'b']),
pick(object, ['a', 'b']),
3,
5,
);
}
console.log(process.hrtime(start));
const assert = require('assert');
const omit = require('lodash/omit');
const pick = require('lodash/pick');
function fnc() {
assert.deepEqual(arguments?.[0], { 'c': 3 })
assert.deepEqual(arguments?.[1], { 'a': 1, 'b': '2' })
assert.ok(arguments?.[2] === 3, '!= 3')
assert.ok(arguments?.[3] === 5, '!= 5')
}
const object = { 'a': 1, 'b': '2', 'c': 3 };
const start = process.hrtime();
for (let i = 0; i < 100000; i++) {
fnc(
omit(object, ['a', 'b']),
omit(object, ['c']),
3,
5,
);
}
console.log(process.hrtime(start));
const assert = require('assert');
function fnc() {
assert.deepEqual(arguments?.[0], { 'c': 3 })
assert.deepEqual(arguments?.[1], { 'a': 1, 'b': '2' })
assert.ok(arguments?.[2] === 3, '!= 3')
assert.ok(arguments?.[3] === 5, '!= 5')
}
const object = { 'a': 1, 'b': '2', 'c': 3 };
const start = process.hrtime();
for (let i = 0; i < 100000; i++) {
const { a, b, ...rest } = object;
fnc(
rest,
{ a, b },
3,
5,
);
}
console.log(process.hrtime(start));
@stephengfriend
Copy link
Author

[ 0, 94807944 ]: keys+filter+reduce
[ 0, 112714779 ]: ...rest
[ 0, 301595702 ]: omit
[ 0, 294580738 ]: omit+pick

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment