Skip to content

Instantly share code, notes, and snippets.

@Hexagon
Created September 29, 2017 09:23
Show Gist options
  • Save Hexagon/0a19dade6daaa3763f4c92c04ecd9eba to your computer and use it in GitHub Desktop.
Save Hexagon/0a19dade6daaa3763f4c92c04ecd9eba to your computer and use it in GitHub Desktop.
var
deepExtend = require('deep-extend'),
deepmerge = require('deepmerge'),
klon = require('klon'),
jonas = (function () {
const toString = Object.prototype.toString;
function isMergeable (value) {
return value && typeof value === 'object' && toString.call(value) !== '[object Date]' && toString.call(value) !== '[object RegExp]';
}
return function merge (obj1, obj2) {
var out = {}, key, p1, p2;
for (key in obj2) {
p1 = obj1[key];
p2 = obj2[key];
if (!isMergeable(p2)) {
out[key] = p2;
} else {
if (isMergeable(p1)) {
out[key] = merge({}, p1);
} else {
out[key] = {};
}
out[key] = merge(out[key], p2);
}
}
return out;
};
}());
var obj1 = {
b:{a:1,b:2},
d:1,
e:2,
f:3
};
var obj2 = {
a:1,
b: {a:1},
c:3,
d: {
a:1,
b:2,
c:3,
d: {
a:1,
b:2,
c:3,
d: {
a:1,
b:2,
c:3,
d: {
a:1,
b:2,
c:3,
d: {
a:1,
b:2,
c:3
}
}
}
}
},
h: new Date()
};
var n, obj3;
console.log()
console.log('---');
console.log('50000 iterations of');
console.log('---');
console.time('deepExtend'); n=50000;while(--n) obj3 = deepExtend({},obj1,obj2); console.timeEnd('deepExtend');
console.time('jonas'); n=50000;while(--n) obj3 = jonas(obj1,obj2); console.timeEnd('jonas');
console.time('deepmerge.all'); n=50000;while(--n) obj3 = deepmerge.all([obj1,obj2]); console.timeEnd('deepmerge.all');
console.time('klon'); n=50000;while(--n) obj3 = klon(obj2,klon(obj1)); console.timeEnd('klon');
console.time('Object.assign'); n=50000;while(--n) obj3 = Object.assign({},obj1,obj2); console.timeEnd('Object.assign');
console.time('Spread'); n=50000;while(--n) obj3 = {...obj1,...obj2}; console.timeEnd('Spread');
console.log('---');
console.log('---');
console.log('klon (deep)');
console.log(klon(obj2,klon(obj1)));
console.log('jonas (deep)');
console.log(jonas(obj1,obj2));
console.log('deepmerge.all (deep)');
console.log(deepmerge.all([obj1,obj2]));
console.log('deepExtend (deep)');
console.log(deepExtend({},obj1,obj2));
console.log('Object.assign (shallow)');
console.log(Object.assign({},obj1,obj2));
console.log('Spread (shallow)');
console.log({...obj1,...obj2});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment