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));