Problem Link

Description


null

Solution


TypeScript

function objDiff(obj1: any, obj2: any): any {
    function isObject(val) {
        return typeof val === 'object' && val !== null && !Array.isArray(val);
    }
 
    function compare(obj1, obj2, path, result) {
        if (isObject(obj1) && isObject(obj2)) {
        for (const key in obj1) {
            if (key in obj2) {
            compare(obj1[key], obj2[key], [...path, key], result);
            }
        }
        } else if (Array.isArray(obj1) && Array.isArray(obj2)) {
        const maxLength = Math.max(obj1.length, obj2.length);
        for (let i = 0; i < maxLength; i++) {
            if (i in obj1 && i in obj2) {
            compare(obj1[i], obj2[i], [...path, i], result);
            }
        }
        } else if (obj1 !== obj2) {
        if (path.length === 0) {
            result = [obj1, obj2];
        } else {
            let currentObj = result;
            for (let i = 0; i < path.length - 1; i++) {
            const key = path[i];
            if (!(key in currentObj)) {
                currentObj[key] = {};
            }
            currentObj = currentObj[key];
            }
            const lastKey = path[path.length - 1];
            currentObj[lastKey] = [obj1, obj2];
        }
        }
    }
 
    const result = {};
    compare(obj1, obj2, [], result);
    return result;
};