Skip to content

Instantly share code, notes, and snippets.

@jschwarty
Last active March 17, 2018 02:30
Show Gist options
  • Save jschwarty/acfa6f8f933b0e094ed6c0006362f201 to your computer and use it in GitHub Desktop.
Save jschwarty/acfa6f8f933b0e094ed6c0006362f201 to your computer and use it in GitHub Desktop.
describe('doit', () => {
it('should build graph', () => {
const t = {
cart: ['saved'],
saved: ['items'],
items: []
};
const r = {
cart: 'cart',
saved: 'cart.saved',
items: 'cart.saved.items'
};
const actual = doit(t);
expect(actual).toEqual(r);
});
it('order should not matter', () => {
const t = {
saved: ['items'],
items: [],
cart: ['saved']
};
const r = {
cart: 'cart',
saved: 'cart.saved',
items: 'cart.saved.items'
};
const actual = doit(t);
expect(actual).toEqual(r);
});
});
function findFullParentPath(obj, keyToFind) {
for (const key in obj) {
if (obj.hasOwnProperty(key) && obj[key].indexOf(keyToFind) >= 0) {
const parent = findFullParentPath(obj, key);
return parent !== null ? `${parent}.${key}` : key;
}
}
return null;
}
function doit(obj, newObj = {}) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const parent = findFullParentPath(obj, key);
newObj[key] = parent ? `${parent}.${key}` : key;
}
}
return newObj;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment