JSFiddle - React, Tailwind, and code Playground
HTML
<div id="difference">
</div>
JavaScript
function diff(obj1,obj2,exclude) {
var r = {};
if (!exclude) exclude = [];
for (var prop in obj1) {
if (obj1.hasOwnProperty(prop) && prop != '__proto__') {
if (exclude.indexOf(obj1[prop]) == -1) {
// check if obj2 has prop
if (!obj2.hasOwnProperty(prop)) r[prop] = obj1[prop];
// check if prop is object and
// NOT a JavaScript engine object (i.e. __proto__), if so, recursive diff
else if (obj1[prop] === Object(obj1[prop])) {
var difference = diff(obj1[prop], obj2[prop]);
if (Object.keys(difference).length > 0) r[prop] = difference;
}
// check if obj1 and obj2 are equal
else if (obj1[prop] !== obj2[prop]) {
if (obj1[prop] === undefined)
r[prop] = 'undefined';
if (obj1[prop] === null)
r[prop] = null;
else if (typeof obj1[prop] === 'function')
r[prop] = 'function';
else if (typeof obj1[prop] === 'object')
r[prop] = 'object';
else
r[prop] = obj1[prop];
}
}
}
}
return r;
}
$(document).ready(function () {
var obj1 = {
a: 2,
b: 4,
c: 23,
d: {
d1: 3,
d2: 5
},
e: null,
f: null,
g: new Object()
}
var obj2 = {
a: 2,
b: 4,
c: 23,
d: {
d1: 3,
d4: 6
},
e: null,
f: "",
g: new Object()
}
var difference1 = diff(obj1, obj2, [obj1.d]);
var difference2 = diff(obj2, obj1);
$('#difference').html("<span>obj1: " + JSON.stringify(difference1) + " keys: " + Object.keys(difference1).length + "<br />obj2: " + JSON.stringify(difference2) + " keys: " + Object.keys(difference2).length + "</span>");
})