{"ScriptPreparationCode":"\r\n// Builds a tree from a flat array of objects. Edited from\r\n// stackoverflow.com/questions/18017869 d3indepth.com/layouts\r\n// github.com/inikulin/parse5 github.com/moappi/json2html (node)\r\nfunction makeLayoutTree(data) {\r\n const tree = []\r\n const dict = Object.create(null)\r\n\r\n let i = data.length\r\n\r\n while (i--) {\r\n dict[data[i].id] = Object.assign(Object.create(null), data[i])\r\n dict[data[i].id].children = []\r\n }\r\n\r\n i = data.length\r\n\r\n while (i--) {\r\n const pid = data[i].parent_id\r\n if (pid) {\r\n dict[pid].children[dict[pid].children.length] = dict[data[i].id]\r\n continue\r\n }\r\n tree[tree.length] = dict[data[i].id]\r\n }\r\n\r\n return tree\r\n}\r\n// Test version caching len, not caching parent_id\r\nfunction makeLayoutTree_noCache(data) {\r\n const tree = []\r\n const dict = Object.create(null)\r\n \r\n let i = data.length\r\n\r\n while (i--) {\r\n dict[data[i].id] = Object.assign(Object.create(null), data[i])\r\n dict[data[i].id].children = []\r\n }\r\n\r\n i = data.length\r\n\r\n while (i--) {\r\n if (data[i].parent_id) {\r\n dict[data[i].parent_id].children[\r\n dict[data[i].parent_id].children.length\r\n ] = dict[data[i].id]\r\n continue\r\n }\r\n tree[tree.length] = dict[data[i].id]\r\n }\r\n\r\n return tree\r\n}\r\n\r\n// Test version caching len, not caching parent_id or using\r\n// continue\r\nfunction makeLayoutTree_noCache_noContinue(data) {\r\n const tree = []\r\n const dict = Object.create(null)\r\n \r\n let i = data.length\r\n\r\n while (i--) {\r\n dict[data[i].id] = Object.assign(Object.create(null), data[i])\r\n dict[data[i].id].children = []\r\n }\r\n\r\n i = data.length\r\n\r\n while (i--) {\r\n if (data[i].parent_id) {\r\n dict[data[i].parent_id].children[\r\n dict[data[i].parent_id].children.length\r\n ] = dict[data[i].id]\r\n } else {\r\n\t tree[tree.length] = dict[data[i].id]\r\n }\r\n }\r\n\r\n return tree\r\n}\r\n\r\n// Test version with forEach instead of while loops\r\nfunction makeLayoutTree_forEach(data) {\r\n const tree = []\r\n const dict = Object.create(null)\r\n\r\n data.forEach(o =\u003E {\r\n dict[o.id] = Object.assign(Object.create(null), o, { children: [] })\r\n })\r\n\r\n data.forEach(o =\u003E {\r\n o.parent_id\r\n ? dict[o.parent_id].children.push(dict[o.id])\r\n : tree.push(dict[o.id])\r\n })\r\n\r\n return tree\r\n}\r\n\r\n\r\nsample1 = [\r\n { id: 1, parent_id: 0 },\r\n { id: 2, parent_id: 1 },\r\n { id: 3, parent_id: 1 },\r\n { id: 4, parent_id: 2 },\r\n { id: 5, parent_id: 0 },\r\n { id: 6, parent_id: 0 },\r\n { id: 7, parent_id: 4 },\r\n]\r\n\r\nsample2 = [\r\n {\r\n id: 1,\r\n Phone: \u0027(403) 125-2552\u0027,\r\n City: \u0027Coevorden\u0027,\r\n Name: \u0027Grady\u0027,\r\n },\r\n {\r\n id: 2,\r\n parent_id: 1,\r\n Phone: \u0027(979) 486-1932\u0027,\r\n City: \u0027Che\u0142m\u0027,\r\n Name: \u0027Scarlet\u0027,\r\n },\r\n {\r\n id: 3,\r\n parent_id: 2,\r\n Phone: \u0027(225) 125-2552\u0027,\r\n City: \u0027Nola\u0027,\r\n Name: \u0027Jill\u0027,\r\n },\r\n {\r\n id: 4,\r\n parent_id: 3,\r\n Phone: \u0027(221) 486-1932\u0027,\r\n City: \u0027BR\u0027,\r\n Name: \u0027John Boy\u0027,\r\n },\r\n {\r\n id: 5,\r\n parent_id: 3,\r\n Phone: \u0027(337) 186-1932\u0027,\r\n City: \u0027Lafayette\u0027,\r\n Name: \u0027Stevie\u0027,\r\n },\r\n {\r\n id: 6,\r\n parent_id: 3,\r\n Phone: \u0027(337) 386-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 7,\r\n parent_id: 3,\r\n Phone: \u0027(337) 432-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 8,\r\n parent_id: 3,\r\n Phone: \u0027(337) 486-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n]\r\n\r\n\r\nsample3 = [\r\n {\r\n id: 31,\r\n Phone: \u0027(403) 125-2552\u0027,\r\n City: \u0027Coevorden\u0027,\r\n Name: \u0027Grady\u0027,\r\n },\r\n {\r\n id: 37,\r\n parent_id: 32,\r\n Phone: \u0027(337) 432-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 38,\r\n parent_id: 32,\r\n Phone: \u0027(337) 486-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 45,\r\n parent_id: 42,\r\n Phone: \u0027(337) 186-1932\u0027,\r\n City: \u0027Lafayette\u0027,\r\n Name: \u0027Stevie\u0027,\r\n },\r\n {\r\n id: 7,\r\n parent_id: 3,\r\n Phone: \u0027(337) 432-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 86,\r\n parent_id: 82,\r\n Phone: \u0027(337) 386-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 43,\r\n parent_id: 41,\r\n Phone: \u0027(225) 125-2552\u0027,\r\n City: \u0027Nola\u0027,\r\n Name: \u0027Jill\u0027,\r\n },\r\n {\r\n id: 44,\r\n parent_id: 42,\r\n Phone: \u0027(221) 486-1932\u0027,\r\n City: \u0027BR\u0027,\r\n Name: \u0027John Boy\u0027,\r\n },\r\n {\r\n id: 81,\r\n Phone: \u0027(403) 125-2552\u0027,\r\n City: \u0027Coevorden\u0027,\r\n Name: \u0027Grady\u0027,\r\n },\r\n {\r\n id: 67,\r\n parent_id: 62,\r\n Phone: \u0027(337) 432-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 47,\r\n parent_id: 42,\r\n Phone: \u0027(337) 432-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 23,\r\n parent_id: 21,\r\n Phone: \u0027(225) 125-2552\u0027,\r\n City: \u0027Nola\u0027,\r\n Name: \u0027Jill\u0027,\r\n },\r\n {\r\n id: 4,\r\n parent_id: 3,\r\n Phone: \u0027(221) 486-1932\u0027,\r\n City: \u0027BR\u0027,\r\n Name: \u0027John Boy\u0027,\r\n },\r\n {\r\n id: 82,\r\n parent_id: 81,\r\n Phone: \u0027(979) 486-1932\u0027,\r\n City: \u0027Che\u0142m\u0027,\r\n Name: \u0027Scarlet\u0027,\r\n },\r\n {\r\n id: 74,\r\n parent_id: 72,\r\n Phone: \u0027(221) 486-1932\u0027,\r\n City: \u0027BR\u0027,\r\n Name: \u0027John Boy\u0027,\r\n },\r\n {\r\n id: 62,\r\n parent_id: 61,\r\n Phone: \u0027(979) 486-1932\u0027,\r\n City: \u0027Che\u0142m\u0027,\r\n Name: \u0027Scarlet\u0027,\r\n },\r\n {\r\n id: 83,\r\n parent_id: 81,\r\n Phone: \u0027(225) 125-2552\u0027,\r\n City: \u0027Nola\u0027,\r\n Name: \u0027Jill\u0027,\r\n },\r\n {\r\n id: 27,\r\n parent_id: 22,\r\n Phone: \u0027(337) 432-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 55,\r\n parent_id: 52,\r\n Phone: \u0027(337) 186-1932\u0027,\r\n City: \u0027Lafayette\u0027,\r\n Name: \u0027Stevie\u0027,\r\n },\r\n {\r\n id: 1,\r\n Phone: \u0027(403) 125-2552\u0027,\r\n City: \u0027Coevorden\u0027,\r\n Name: \u0027Grady\u0027,\r\n },\r\n {\r\n id: 71,\r\n Phone: \u0027(403) 125-2552\u0027,\r\n City: \u0027Coevorden\u0027,\r\n Name: \u0027Grady\u0027,\r\n },\r\n {\r\n id: 48,\r\n parent_id: 42,\r\n Phone: \u0027(337) 486-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 36,\r\n parent_id: 32,\r\n Phone: \u0027(337) 386-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 76,\r\n parent_id: 72,\r\n Phone: \u0027(337) 386-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 2,\r\n parent_id: 1,\r\n Phone: \u0027(979) 486-1932\u0027,\r\n City: \u0027Che\u0142m\u0027,\r\n Name: \u0027Scarlet\u0027,\r\n },\r\n {\r\n id: 46,\r\n parent_id: 42,\r\n Phone: \u0027(337) 386-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 35,\r\n parent_id: 32,\r\n Phone: \u0027(337) 186-1932\u0027,\r\n City: \u0027Lafayette\u0027,\r\n Name: \u0027Stevie\u0027,\r\n },\r\n {\r\n id: 53,\r\n parent_id: 51,\r\n Phone: \u0027(225) 125-2552\u0027,\r\n City: \u0027Nola\u0027,\r\n Name: \u0027Jill\u0027,\r\n },\r\n {\r\n id: 72,\r\n parent_id: 71,\r\n Phone: \u0027(979) 486-1932\u0027,\r\n City: \u0027Che\u0142m\u0027,\r\n Name: \u0027Scarlet\u0027,\r\n },\r\n {\r\n id: 65,\r\n parent_id: 62,\r\n Phone: \u0027(337) 186-1932\u0027,\r\n City: \u0027Lafayette\u0027,\r\n Name: \u0027Stevie\u0027,\r\n },\r\n {\r\n id: 73,\r\n parent_id: 71,\r\n Phone: \u0027(225) 125-2552\u0027,\r\n City: \u0027Nola\u0027,\r\n Name: \u0027Jill\u0027,\r\n },\r\n {\r\n id: 25,\r\n parent_id: 22,\r\n Phone: \u0027(337) 186-1932\u0027,\r\n City: \u0027Lafayette\u0027,\r\n Name: \u0027Stevie\u0027,\r\n },\r\n {\r\n id: 63,\r\n parent_id: 61,\r\n Phone: \u0027(225) 125-2552\u0027,\r\n City: \u0027Nola\u0027,\r\n Name: \u0027Jill\u0027,\r\n },\r\n {\r\n id: 68,\r\n parent_id: 62,\r\n Phone: \u0027(337) 486-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 52,\r\n parent_id: 51,\r\n Phone: \u0027(979) 486-1932\u0027,\r\n City: \u0027Che\u0142m\u0027,\r\n Name: \u0027Scarlet\u0027,\r\n },\r\n {\r\n id: 84,\r\n parent_id: 82,\r\n Phone: \u0027(221) 486-1932\u0027,\r\n City: \u0027BR\u0027,\r\n Name: \u0027John Boy\u0027,\r\n },\r\n {\r\n id: 66,\r\n parent_id: 62,\r\n Phone: \u0027(337) 386-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 34,\r\n parent_id: 32,\r\n Phone: \u0027(221) 486-1932\u0027,\r\n City: \u0027BR\u0027,\r\n Name: \u0027John Boy\u0027,\r\n },\r\n {\r\n id: 3,\r\n parent_id: 2,\r\n Phone: \u0027(225) 125-2552\u0027,\r\n City: \u0027Nola\u0027,\r\n Name: \u0027Jill\u0027,\r\n },\r\n {\r\n id: 58,\r\n parent_id: 52,\r\n Phone: \u0027(337) 486-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 78,\r\n parent_id: 72,\r\n Phone: \u0027(337) 486-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 88,\r\n parent_id: 82,\r\n Phone: \u0027(337) 486-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 33,\r\n parent_id: 31,\r\n Phone: \u0027(225) 125-2552\u0027,\r\n City: \u0027Nola\u0027,\r\n Name: \u0027Jill\u0027,\r\n },\r\n {\r\n id: 87,\r\n parent_id: 82,\r\n Phone: \u0027(337) 432-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 57,\r\n parent_id: 52,\r\n Phone: \u0027(337) 432-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 8,\r\n parent_id: 3,\r\n Phone: \u0027(337) 486-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 64,\r\n parent_id: 62,\r\n Phone: \u0027(221) 486-1932\u0027,\r\n City: \u0027BR\u0027,\r\n Name: \u0027John Boy\u0027,\r\n },\r\n {\r\n id: 85,\r\n parent_id: 82,\r\n Phone: \u0027(337) 186-1932\u0027,\r\n City: \u0027Lafayette\u0027,\r\n Name: \u0027Stevie\u0027,\r\n },\r\n {\r\n id: 21,\r\n Phone: \u0027(403) 125-2552\u0027,\r\n City: \u0027Coevorden\u0027,\r\n Name: \u0027Grady\u0027,\r\n },\r\n {\r\n id: 61,\r\n Phone: \u0027(403) 125-2552\u0027,\r\n City: \u0027Coevorden\u0027,\r\n Name: \u0027Grady\u0027,\r\n },\r\n {\r\n id: 77,\r\n parent_id: 72,\r\n Phone: \u0027(337) 432-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 56,\r\n parent_id: 52,\r\n Phone: \u0027(337) 386-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 28,\r\n parent_id: 22,\r\n Phone: \u0027(337) 486-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 42,\r\n parent_id: 41,\r\n Phone: \u0027(979) 486-1932\u0027,\r\n City: \u0027Che\u0142m\u0027,\r\n Name: \u0027Scarlet\u0027,\r\n },\r\n {\r\n id: 51,\r\n Phone: \u0027(403) 125-2552\u0027,\r\n City: \u0027Coevorden\u0027,\r\n Name: \u0027Grady\u0027,\r\n },\r\n {\r\n id: 75,\r\n parent_id: 72,\r\n Phone: \u0027(337) 186-1932\u0027,\r\n City: \u0027Lafayette\u0027,\r\n Name: \u0027Stevie\u0027,\r\n },\r\n {\r\n id: 54,\r\n parent_id: 52,\r\n Phone: \u0027(221) 486-1932\u0027,\r\n City: \u0027BR\u0027,\r\n Name: \u0027John Boy\u0027,\r\n },\r\n {\r\n id: 6,\r\n parent_id: 3,\r\n Phone: \u0027(337) 386-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n {\r\n id: 24,\r\n parent_id: 22,\r\n Phone: \u0027(221) 486-1932\u0027,\r\n City: \u0027BR\u0027,\r\n Name: \u0027John Boy\u0027,\r\n },\r\n {\r\n id: 32,\r\n parent_id: 31,\r\n Phone: \u0027(979) 486-1932\u0027,\r\n City: \u0027Che\u0142m\u0027,\r\n Name: \u0027Scarlet\u0027,\r\n },\r\n {\r\n id: 22,\r\n parent_id: 21,\r\n Phone: \u0027(979) 486-1932\u0027,\r\n City: \u0027Che\u0142m\u0027,\r\n Name: \u0027Scarlet\u0027,\r\n },\r\n {\r\n id: 5,\r\n parent_id: 3,\r\n Phone: \u0027(337) 186-1932\u0027,\r\n City: \u0027Lafayette\u0027,\r\n Name: \u0027Stevie\u0027,\r\n },\r\n {\r\n id: 41,\r\n Phone: \u0027(403) 125-2552\u0027,\r\n City: \u0027Coevorden\u0027,\r\n Name: \u0027Grady\u0027,\r\n },\r\n {\r\n id: 26,\r\n parent_id: 22,\r\n Phone: \u0027(337) 386-1932\u0027,\r\n City: \u0027NISH\u0027,\r\n Name: \u0027Lena\u0027,\r\n },\r\n]\r\n\r\n","TestCases":[{"Name":"While Loop with cached parent_id","Code":"makeLayoutTree(sample1)\r\nmakeLayoutTree(sample2)\r\nmakeLayoutTree(sample3)","IsDeferred":false},{"Name":"While Loop no caching parent_id","Code":"makeLayoutTree_noCache(sample1)\r\nmakeLayoutTree_noCache(sample2)\r\nmakeLayoutTree_noCache(sample3)","IsDeferred":false},{"Name":"Using ForEach() instead of While Loop","Code":"makeLayoutTree_forEach(sample1)\r\nmakeLayoutTree_forEach(sample2)\r\nmakeLayoutTree_forEach(sample3)","IsDeferred":false},{"Name":"While Loop without cache/continue","Code":"makeLayoutTree_noCache_noContinue(sample1)\r\nmakeLayoutTree_noCache_noContinue(sample2)\r\nmakeLayoutTree_noCache_noContinue(sample3)","IsDeferred":false}]}