JSFiddle - React, Tailwind, and code Playground
by WilsonPage
JavaScript
var o1 = {
name: "foo",
desc: "baaa baad baa",
origin: {
country: "uk"
},
imgs: ['qwert']
}
var o2 = {
name: "foo",
desc: "baaa baad baa",
origin: {
country: "uk"
}
}
function isArray(item) {
return (typeof item === 'object' && !isNaN(item.length));
}
function isObject(item) {
return (typeof item === 'object' && isNaN(item.length));
}
function size(o) {
var size = 0, key;
for (key in o) {
if (o.hasOwnProperty(key)) size++;
}
return size;
};
function getWhatChanged(o1, o2) {
var r = {},
oldVal, newVal;
for (var key in o2) {
oldVal = o1[key];
newVal = o2[key];
if (!oldVal) {
r[key] = (isArray(newVal)) ? [] : "";
} else if (oldVal !== newVal) {
if (isObject(newVal)) {
r[key] = getWhatChanged(oldVal, newVal);
if (!size(r[key])) delete r[key];
} else if (isArray(newVal)) {
r[key] = oldVal || [];
} else {
r[key] = oldVal || "";
}
}
}
return r;
}
console.log(getWhatChanged(o1, o2));