{"ScriptPreparationCode":"// nested property \u0022manager\u0022\r\nvar testInput = [{\r\n name: \u0022Enrique\u0022,\r\n manager: null,\r\n title: \u0022CEO\u0022\r\n },\r\n {\r\n name: \u0022Connor\u0022,\r\n manager: \u0022Enrique\u0022,\r\n title: \u0022Engineer\u0022\r\n },\r\n {\r\n name: \u0022Ben\u0022,\r\n manager: \u0022Enrique\u0022,\r\n title: \u0022Engineer\u0022\r\n },\r\n {\r\n name: \u0022Jeffrey\u0022,\r\n manager: \u0022Enrique\u0022,\r\n title: \u0022Designer\u0022\r\n },\r\n {\r\n name: \u0022Lisa\u0022,\r\n manager: null,\r\n title: \u0022COO\u0022\r\n },\r\n {\r\n name: \u0022Dan\u0022,\r\n manager: \u0022Lisa\u0022,\r\n title: \u0022Sales Manager\u0022\r\n },\r\n {\r\n name: \u0022Hannah\u0022,\r\n manager: \u0022Dan\u0022,\r\n title: \u0022Sales\u0022\r\n },\r\n {\r\n name: \u0022Justin\u0022,\r\n manager: \u0022Dan\u0022,\r\n title: \u0022Sales\u0022\r\n },\r\n {\r\n name: \u0022Lauren\u0022,\r\n manager: \u0022Lisa\u0022,\r\n title: \u0022Customer Success\u0022\r\n },\r\n];\r\n\r\nfunction orgChart(list) {\r\n for (let i = 0; i \u003C list.length; i\u002B\u002B) {\r\n const member = list[i]\r\n if (!member.manager) {\r\n console.log(getText(member))\r\n // solve the last two console logs\r\n // I only need getParent with top managers\r\n // that reduces iterations\r\n getParent(list, member)\r\n }\r\n\r\n }\r\n}\r\n\r\nfunction getParent(list, member, nestLevel = 1) {\r\n for (let m = 0; m \u003C list.length; m\u002B\u002B) {\r\n const position = list[m]\r\n if (position.manager === member.name) {\r\n console.log(\u0027 \u0027.repeat(4 * nestLevel) \u002B getText(position))\r\n getParent(list, position, nestLevel \u002B 1)\r\n }\r\n }\r\n}\r\n\r\nfunction getText(member) {\r\n return \u0060${member.name} ( ${member.title} )\u0060\r\n}\r\n\r\nfunction orgChartImproved(list) {\r\n const managers = {}\r\n for (let i = 0; i \u003C list.length; i\u002B\u002B) {\r\n const member = list[i]\r\n if (member.manager) {\r\n if (!managers[member.manager]) {\r\n managers[member.manager] = []\r\n }\r\n managers[member.manager].push(i)\r\n }\r\n }\r\n\r\n for (let i = 0; i \u003C list.length; i\u002B\u002B) {\r\n const member = list[i]\r\n if (!member.manager) {\r\n console.log(getText(member))\r\n findNested(member, list, managers)\r\n }\r\n }\r\n}\r\n\r\nfunction findNested(member, data, managers, level = 1) {\r\n const nestedList = managers[member.name]\r\n if (nestedList) {\r\n nestedList.forEach((memberIdx) =\u003E {\r\n const member = data[memberIdx]\r\n console.log(\u0027 \u0027.repeat(4 * level), getText(member))\r\n findNested(member, data, managers, level \u002B 1)\r\n })\r\n }\r\n}","TestCases":[{"Name":"orgChart() Test","Code":"orgChart(testInput)","IsDeferred":false},{"Name":"orgChartImproved() Test","Code":"orgChartImproved(testInput)","IsDeferred":false}]}