I got this challenge.
const hierarchy = [
{ memberId: 1, parentMemberId: 8, level: 2, name: 'John Doe' },
{ memberId: 2, parentMemberId: 1, level: 3, name: 'Daniel Thorpe' },
{ memberId: 3, parentMemberId: 5, level: 3, name: 'David Suarez' },
{ memberId: 4, parentMemberId: 5, level: 3, name: 'Felix Mcgee' },
{ memberId: 5, parentMemberId: 8, level: 2, name: 'Deena Duarte' },
{ memberId: 6, parentMemberId: 3, level: 4, name: 'Ron Gaines' },
{ memberId: 7, parentMemberId: 9, level: 5, name: 'Kellie Clements' },
{ memberId: 8, parentMemberId: 0, level: 1, name: 'Tony Soprano' },
{ memberId: 9, parentMemberId: 3, level: 4, name: 'John Kavanagh' },
{ memberId: 10, parentMemberId: 8, level: 2, name: 'Shawn Huynh' },
];
Using this data, I should print the hierarchy by level. Result example:
Tony Soprano
John Doe -> Tony Soprano
Deena Duarte -> Tony Soprano
Shawn Huynh -> Tony Soprano
Daniel Thorpe -> John Doe -> Tony Soprano
I did it this way:
const printHierarchy = hierarchy => {
hierarchy.sort((memberA, memberB) => memberA.level - memberB.level);
const hierarchyObj = {};
for (let member of hierarchy) {
const { name, memberId, parentMemberId } = member;
hierarchyObj[memberId] = name;
if (hierarchyObj[parentMemberId] != undefined) {
hierarchyObj[memberId] += ` -> ${hierarchyObj[parentMemberId]}`;
}
}
for (let member of hierarchy) {
const { memberId } = member;
console.log(hierarchyObj[memberId]);
}
}
const hierarchy = [
{ memberId: 1, parentMemberId: 8, level: 2, name: 'John Doe' },
{ memberId: 2, parentMemberId: 1, level: 3, name: 'Daniel Thorpe' },
{ memberId: 3, parentMemberId: 5, level: 3, name: 'David Suarez' },
{ memberId: 4, parentMemberId: 5, level: 3, name: 'Felix Mcgee' },
{ memberId: 5, parentMemberId: 8, level: 2, name: 'Deena Duarte' },
{ memberId: 6, parentMemberId: 3, level: 4, name: 'Ron Gaines' },
{ memberId: 7, parentMemberId: 9, level: 5, name: 'Kellie Clements' },
{ memberId: 8, parentMemberId: 0, level: 1, name: 'Tony Soprano' },
{ memberId: 9, parentMemberId: 3, level: 4, name: 'John Kavanagh' },
{ memberId: 10, parentMemberId: 8, level: 2, name: 'Shawn Huynh' },
];
printHierarchy(hierarchy);
.as-console-wrapper { min-height: 100%!important; top: 0; }
The manager said this works great, but added:
"If the array would contain 100,000 elements, would you still use the iterative solution? if not, what would you do?"
I can't really find a better way. What am I missing? We do need to loop to sort.