Differences Between Two Objects

Medium

Solution

/* eslint-disable @typescript-eslint/no-explicit-any */
export function objDiff(obj1: any, obj2: any): any {
  const isObject = (obj: any) => typeof obj === 'object' && obj !== null;
 
  if (obj1 === obj2) {
    return {};
  }
 
  if (!isObject(obj1) || !isObject(obj2)) {
    return [obj1, obj2];
  }
 
  if (Array.isArray(obj1) !== Array.isArray(obj2)) {
    return [obj1, obj2];
  }
 
  const diff: any = {};
  for (const key in obj1) {
    if (key in obj2) {
      const nestedDiff = objDiff(obj1[key], obj2[key]);
      if (0 < Object.keys(nestedDiff).length) {
        diff[key] = nestedDiff;
      }
    }
  }
 
  return diff;
}