js get 2 object differences
by John Wick
JavaScript
// sayop ni, naay send type
function diffObjects1(beforeObj, afterObj) {
console.log('diffObjects v1');
const result = {};
function compareValues(key, beforeVal, afterVal) {
if (beforeVal !== afterVal) {
if (typeof beforeVal === 'object' && beforeVal !== null && !Array.isArray(beforeVal)) {
const nestedDiff = diffObjects(beforeVal, afterVal);
if (Object.keys(nestedDiff).length > 0) {
result[key] = nestedDiff;
}
} else {
result[key] = {
prev: beforeVal,
new: afterVal
};
}
}
}
for (const key in afterObj) {
if (beforeObj.hasOwnProperty(key)) {
compareValues(key, beforeObj[key], afterObj[key]);
} else {
// If the key exists in afterObj but not in beforeObj, treat beforeVal as undefined
result[key] = {
prev: undefined,
new: afterObj[key]
};
}
}
return result;
}
// sakto ni
function diffObjects(beforeObj, afterObj) {
console.log('diffObjects v2');
let diff = {};
// Helper function to compare two objects recursively
function compareValues(beforeVal, afterVal) {
if (typeof beforeVal === 'object' && !Array.isArray(beforeVal) && beforeVal !== null) {
// Recursively compare if it's an object
const nestedDiff = diffObjects(beforeVal, afterVal);
return Object.keys(nestedDiff).length > 0 ? nestedDiff : null;
} else if (Array.isArray(beforeVal) && Array.isArray(afterVal)) {
// Compare arrays
if (JSON.stringify(beforeVal) !== JSON.stringify(afterVal)) {
return { prev: beforeVal, new: afterVal };
}
} else {
// Compare primitive values
if (beforeVal !== afterVal) {
return { prev: beforeVal, new: afterVal };
}
}
return null;
}
for (let key in beforeObj) {
if (afterObj.hasOwnProperty(key)) {
const result = compareValues(beforeObj[key], afterObj[key]);
if (result) {
diff[key] = result;
}
...