Skip to content

Instantly share code, notes, and snippets.

@johandalabacka
Created February 26, 2020 16:18
Show Gist options
  • Save johandalabacka/c4622b23e9a6b1c9de80f0c7ee1aac60 to your computer and use it in GitHub Desktop.
Save johandalabacka/c4622b23e9a6b1c9de80f0c7ee1aac60 to your computer and use it in GitHub Desktop.
function objectDiff(o1, o2) {
o = {}
for(let [key, value] of Object.entries(o2)) {
if (value !== o1[key] && o1[key] !== undefined) {
o[key] = value
}
}
return o
}
function objectDiff2(o1, o2) {
o = {}
for(let key of Object.keys(o2)) {
if (o2[key] !== o1[key] && o1[key] !== undefined) {
o[key] = o2[key]
}
}
return o
}
function objectDiff3(o1, o2) {
o = {}
for(let key of Object.keys(o2)) {
const v1 = o1[key]
if (o2[key] !== v1 && v1 !== undefined) {
o[key] = o2[key]
}
}
return o
}
a = {name: 'Johan', age: 33, len: 194, city: 'Lund'}
b = {age: 34, size: 8, city: 'Prag'}
// About 10ms
console.time('test')
console.log(objectDiff(a, b))
console.timeEnd('test')
// About 0.2 ms
console.time('test2')
console.log(objectDiff2(a, b))
console.timeEnd('test2')
// About 0.1-0.2 ms but always faster than test2
console.time('test3')
console.log(objectDiff3(a, b))
console.timeEnd('test3')
@johandalabacka
Copy link
Author

johandalabacka commented Feb 26, 2020

Like this:

$ node odiff.js
{ age: 34, city: 'Prag' }
test: 11.651ms
{ age: 34, city: 'Prag' }
test2: 0.245ms
{ age: 34, city: 'Prag' }
test3: 0.178ms

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