Clone Omitting Key

Benchmark created on


Setup

function reduceKeys(obj, omitKey) {
  return Object.keys(obj).reduce((result, key) => {
    if(key !== omitKey) {
       result[key] = obj[key];
    }
    return result;
  }, {});
}

function filterReduce (obj, omitKey) {
	return Object.keys(obj)
	.filter(key => key != omitKey)
	.reduce((result, key) => {
		result[key] = obj[key];
		return result;
	}, {})
}

function assignDelete(obj, omitKey) {
	const clone = Object.assign({}, obj);
    delete clone[omitKey];
    return clone;
}

function destructure(obj, omitKey) {
	const {[omitKey]: _, ...rest} = obj;
	return rest;
}

const obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 4,
  e: 5,
  f: 6,
  g: 7,
  h: 8,
  i: 9,
  j: 10,
  k: 11,
  l: 12,
  m: 13,
  n: 14,
  o: 15,
  p: 16,
  q: 17,
  r: 18,
  s: 19,
  t: 20,
  u: 21,
  v: 22,
  w: 23,
  x: 24,
  y: 25,
  z: 26,
}

Test runner

Ready to run.

Testing in
TestOps/sec
reduce
reduceKeys(obj, 'c')
ready
filter + reduce
filterReduce(obj, 'c')
ready
Object.assign + delete
assignDelete(obj, 'c')
ready
Destructuring
destructure(obj, 'c')
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.