Object Difference Finder

by Emily Humphrey

JavaScript

function differenceFinder(objA, objB) {
    const changes = {};

    for (const key in objB) {
        if (Object.prototype.hasOwnProperty.call(objB, key)) {
            if (Array.isArray(objB[key]) && Array.isArray(objA[key])) {
                // Compare arrays
                if (JSON.stringify(objA[key]) !== JSON.stringify(objB[key])) {
                    changes[key] = objB[key];
                }
            } else if (typeof objB[key] === 'object' && typeof objA[key] === 'object') {
                // Compare objects recursively
                const nestedChanges = differenceFinder(objA[key], objB[key]);
                if (Object.keys(nestedChanges).length > 0) {
                    changes[key] = nestedChanges;
                }
            } else if (objA[key] !== objB[key]) {
                // Compare primitive values
                changes[key] = objB[key];
            }
        }
    }

    return changes;
}

// Example usage
const oldObj = {
    title: "Development",
    admin: "101",
    features: ["webapps", "modules"],
    settings: {
        theme: "dark",
        notifications: true
    }
};

const newObj = {
    title: "Development2",
    admin: "101",
    settings: {
        theme: "light",
        notifications: true
    }
};

console.log(differenceFinder(oldObj, newObj));