{"ScriptPreparationCode":"function groupByObj(array, mapper) {\r\n return array.reduce(\r\n (acc, item) =\u003E {\r\n const key = mapper(item);\r\n const items = acc[key] ?? (acc[key] = []);\r\n items.push(item);\r\n return acc;\r\n }, {},\r\n );\r\n}\r\n\r\nfunction groupByMap1(array, mapper) {\r\n return array.reduce(\r\n (acc, item) =\u003E {\r\n const key = mapper(item);\r\n let items = acc.get(key);\r\n if (!items) {\r\n items = []\r\n acc.set(key, items)\r\n }\r\n items.push(item);\r\n return acc;\r\n }, new Map(),\r\n );\r\n}\r\n\r\nfunction groupByMap2(array, mapper) {\r\n return array.reduce(\r\n (acc, item) =\u003E {\r\n const key = mapper(item);\r\n if (!acc.has(key)) {\r\n acc.set(key, [item])\r\n } else { acc.get(key).push(item) }\r\n return acc;\r\n }, new Map(),\r\n );\r\n}\r\n\r\nfunction makeid(length) {\r\n var result = \u0027\u0027;\r\n var characters = \u0027ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\u0027;\r\n var charactersLength = characters.length;\r\n for (var i = 0; i \u003C length; i\u002B\u002B) {\r\n result \u002B= characters.charAt(Math.floor(Math.random() * charactersLength));\r\n }\r\n return result;\r\n}\r\n\r\nfunction randomIntFromInterval(min, max) { // min and max included \r\n return Math.floor(Math.random() * (max - min \u002B 1) \u002B min);\r\n}\r\n\r\nvar data = []\r\n\r\nfor (let i = 0; i \u003C 1000; i\u002B\u002B) {\r\n data.push({\r\n name: makeid(randomIntFromInterval(5, 16)),\r\n age: randomIntFromInterval(1, 100),\r\n occupation: Math.random() \u003E 0.8 ? makeid(randomIntFromInterval(5, 16)) : null\r\n })\r\n}","TestCases":[{"Name":"Object.groupBy","Code":"return Object.groupBy(data, item =\u003E item.occupation)","IsDeferred":false},{"Name":"Manual groupBy obj","Code":"return groupByObj(data, item =\u003E item.occupation)","IsDeferred":false},{"Name":"Manual groupBy map 1","Code":"return groupByMap1(data, item =\u003E item.occupation)","IsDeferred":false},{"Name":"Manual groupBy map 2","Code":"return groupByMap2(data, item =\u003E item.occupation)","IsDeferred":false}]}