Skip to content

Instantly share code, notes, and snippets.

@mr21
Last active February 7, 2018 02:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mr21/8a59b6950a9032c7cba6231e400c72a9 to your computer and use it in GitHub Desktop.
Save mr21/8a59b6950a9032c7cba6231e400c72a9 to your computer and use it in GitHub Desktop.
"use strict";
function diffObjects( a, b ) {
var ak, diff = {};
Object.entries( b ).forEach( ( [ k, val ] ) => {
ak = a[ k ];
if ( ak !== val ) {
if ( !val || typeof val !== "object" ) {
diff[ k ] = val;
} else if ( Array.isArray( val ) ) {
if ( !Array.isArray( ak ) || ak.toString() !== val.toString() ) {
diff[ k ] = Array.from( val );
}
} else {
diff[ k ] = diffObjects( ak || {}, val );
if ( !Object.keys( diff[ k ] ).length ) {
delete diff[ k ];
}
}
}
} );
return diff;
}
@mr21
Copy link
Author

mr21 commented Jan 19, 2018

Be careful, this algorithm consider Arrays like an atomic value, like String, Number, etc.
You must prevent at the maximum the use of Array to store Objects if you want to use this algorithm.

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