{"ScriptPreparationCode":"var max2 = 10000;\r\n\r\nvar data = [];\r\nfor (var i = 0; i \u003C= max2; i\u002B\u002B) { data.push({ id: i, title: \u0060a${i}bc\u0060 }); }\r\n\r\nfunction whileGroup(data) {\r\n const grouped = {};\r\n const length = data.length;\r\n let i = 0;\r\n\r\n while(i \u003C length) {\r\n const item = data[i];\r\n if(grouped[item.id]) grouped[item.id].push(item);\r\n else grouped[item.id] = [];\r\n \r\n i\u002B\u002B;\r\n } \r\n \r\n return grouped;\r\n}","TestCases":[{"Name":"Lodash","Code":"_.groupBy(data, ({ id }) =\u003E id)","IsDeferred":false},{"Name":"Native reduce","Code":"data.reduce((acc, item) =\u003E {\r\n if(acc[item.id]) acc[item.id].push(item);\r\n else acc[item.id] = [item];\r\n return acc;\r\n}, {})","IsDeferred":false},{"Name":"Native reduce (ownProperty check)","Code":"data.reduce((acc, item) =\u003E {\r\n if({}.hasOwnProperty.call(acc, \u0022id\u0022)) acc[item.id].push(item);\r\n else acc[item.id] = [item];\r\n return acc;\r\n}, {})","IsDeferred":false},{"Name":"Native reduce (only if)","Code":"data.reduce((acc, item) =\u003E {\r\n if(!acc[item.id]) acc[item.id] = [];\r\n acc[item.id].push(item);\r\n return acc;\r\n}, {})","IsDeferred":false}]}