apphouse
Version:
Component library for React that uses observable state management and theme-able components.
39 lines (35 loc) • 1.24 kB
text/typescript
/**
* Compares keys between two objects and returns an array of missing keys in the second object.
* Nested objects are also checked.
*
* @template T
* @param {T} obj1 - The first object to compare keys.
* @param {T} obj2 - The second object to compare keys against.
* @return {string[]} - An array of missing keys in `obj2` compared to `obj1`.
*/
export function compareKeys<T extends { [key: string]: any }>(
obj1: T,
obj2: T,
prefix = ''
): string[] {
const missingKeys: string[] = [];
for (const key in obj1) {
if (!(key in obj2) || typeof obj1[key] !== typeof obj2[key]) {
// const mappedChildrenKeys = getMappedKeys(obj1[key]);
// let childrenKeys = '';
// if (mappedChildrenKeys.length > 0) {
// childrenKeys = `.${getMappedKeys(obj1[key])}`;
// }
missingKeys.push(prefix + key);
} else if (typeof obj1[key] === 'object') {
const nestedKeys = compareKeys(obj1[key], obj2[key], prefix + key + '.');
missingKeys.push(...nestedKeys.map((nestedKey) => prefix + nestedKey));
}
}
for (const key in obj2) {
if (!(key in obj1) || typeof obj1[key] !== typeof obj2[key]) {
missingKeys.push(prefix + key);
}
}
return missingKeys;
}