{"ScriptPreparationCode":" var collection = [\r\n {\r\n name: \u0027Fabver\u0027,\r\n type: 1,\r\n company: \u0027ADL\u0027,\r\n },\r\n {\r\n name: \u0027Fabian\u0027,\r\n type: 0,\r\n company: \u0027ADL\u0027,\r\n },\r\n {\r\n name: \u0027Andr\u00E9s\u0027,\r\n type: 0,\r\n company: \u0027JWT\u0027,\r\n },\r\n {\r\n name: \u0027Andrew\u0027,\r\n type: 1,\r\n company: \u0027JWT\u0027,\r\n },\r\n ];\r\n\r\nvar index = Math.floor(Math.random() * 3);\r\nvar key = [\u0027name\u0027, \u0027type\u0027, \u0027company\u0027][index]","TestCases":[{"Name":"groupBy with two while","Code":"if (!collection.length) return [collection];\r\n\r\nconst origin = [...collection];\r\nconst groups = [];\r\n\r\nwhile (origin.length) {\r\n const group = [];\r\n const obj = origin.shift();\r\n if (obj) {\r\n group.push(obj);\r\n let i = 0;\r\n while (i \u003C origin.length) {\r\n if (obj[key] === origin[i][key]) {\r\n group.push(origin.splice(i, 1)[0]);\r\n }\r\n i\u002B\u002B;\r\n }\r\n }\r\n groups.push(group);\r\n}\r\n\r\nreturn groups;\r\n ","IsDeferred":false},{"Name":"groupBy with while and filter","Code":"if (!collection.length) return [collection];\r\n\r\nconst groups = [];\r\nlet i = 0;\r\nlet selected = {};\r\n\r\nwhile (i \u003C collection.length) {\r\n if (!selected || selected[key] !== collection[i][key]) {\r\n selected = collection[i];\r\n groups.push(collection.filter((item) =\u003E item[key] === selected[key]));\r\n }\r\n i\u002B\u002B;\r\n}\r\n\r\nreturn groups;\r\n","IsDeferred":false},{"Name":"groupBy with Set and filter","Code":"if (!collection.length) return [collection];\r\n\r\nconst groups = [];\r\nconst keyValues = collection.map((item) =\u003E item[key]);\r\nconst uniqueValues = [...new Set(keyValues)];\r\n\r\nuniqueValues.forEach((value) =\u003E groups.push(collection.filter((item) =\u003E item[key] === value)));\r\n\r\nreturn groups;\r\n","IsDeferred":false},{"Name":"groupBy with two filters","Code":"if (!collection.length) return [collection];\r\n\r\nconst groups = [];\r\nconst keyValues = collection.map((item) =\u003E item[key]);\r\nconst uniqueValues = keyValues.filter((value, index, self) =\u003E self.indexOf(value) === index);\r\n\r\nuniqueValues.forEach((value) =\u003E groups.push(collection.filter((item) =\u003E item[key] === value)));\r\n\r\nreturn groups;\r\n","IsDeferred":false}]}