You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.3 KiB
JavaScript

function findDifferentProperties(objA, objB, prefix = '') {
const differentProps = {};
for (const key in objA) {
if (objA.hasOwnProperty(key)) {
const propPath = prefix ? `${prefix}.${key}` : key;
if (typeof objA[key] === 'object' && typeof objB[key] === 'object') {
const nestedDifferences = findDifferentProperties(objA[key], objB[key], propPath);
if (Object.keys(nestedDifferences).length > 0) {
differentProps[key] = nestedDifferences;
}
} else if (objA[key] !== objB[key]) {
// differentProps[key] = {
// oldValue: objA[key],
// newValue: objB[key],
// };
differentProps[key] = objB[key];
}
}
}
return differentProps;
}
function flattenObject(obj, parentKey = '') {
const result = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const newKey = parentKey ? `${parentKey}.${key}` : key;
if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
const flattened = flattenObject(obj[key], newKey);
Object.assign(result, flattened);
} else {
result[newKey] = obj[key];
}
}
}
return result;
}