{"ScriptPreparationCode":"var max2 = 100000;\r\n\r\nvar data = [];\r\nfor (var i = 0; i \u003C= max2; i\u002B\u002B) { data.push({ id: i }); }\r\n\r\n\r\n\r\n\r\n\r\nfunction groupByReduce(arr, iteratee) {\r\n return arr.reduce((acc, v) =\u003E {\r\n const k = iteratee(v);\r\n (acc[k] || (acc[k] = [])).push(v)\r\n return acc;\r\n }, {})\r\n}\r\n\r\nfunction groupByReduceBetter(arr, iteratee) {\r\n return arr.reduce((acc, v) =\u003E {\r\n const k = iteratee(v);\r\n if(acc[k]) {\r\n acc[k].push(v);\r\n } else {\r\n acc[k] = [v];\r\n }\r\n return acc;\r\n }, {})\r\n}\r\n\r\nfunction groupByHasOwnProperty(arr, iteratee) {\r\n return arr.reduce((acc, v) =\u003E {\r\n const k = iteratee(v);\r\n if(acc.hasOwnProperty(k)) {\r\n acc[k].push(v);\r\n } else {\r\n acc[k] = [v];\r\n }\r\n return acc;\r\n }, {})\r\n}\r\n\r\n\r\nfunction groupByHasOwnPropertyCall(arr, iteratee) {\r\n return arr.reduce((acc, v) =\u003E {\r\n const k = iteratee(v);\r\n if(hasOwnProperty.call(acc, k)) {\r\n acc[k].push(v);\r\n } else {\r\n acc[k] = [v];\r\n }\r\n return acc;\r\n }, {})\r\n}\r\n\r\nfunction groupByMap(arr, iteratee) {\r\n const m = new Map();\r\n\r\n for (const v of arr) {\r\n const k = iteratee(v);\r\n const temp = m.get(k) ?? [];\r\n temp.push(v);\r\n m.set(k, temp)\r\n }\r\n return m;\r\n}\r\n\r\nfunction groupByMapBetter(arr, iteratee) {\r\n const m = new Map();\r\n\r\n for (let length = arr.length, i = 0; i \u003C length; \u002B\u002Bi) {\r\n const k = iteratee(arr[i]);\r\n let temp = m.get(k);\r\n if (temp) {\r\n temp.push(arr[i]);\r\n } else {\r\n temp = [arr[i]]\r\n }\r\n m.set(k, temp)\r\n }\r\n return m;\r\n}\r\n\r\nvar iteratee = ({ id }) =\u003E id","TestCases":[{"Name":"Lodash","Code":"_.groupBy(data, iteratee)","IsDeferred":false},{"Name":"Native","Code":"data.reduce((acc, item) =\u003E {\r\n if(acc[item.id]) {\r\n acc[item.id].push(item);\r\n } else {\r\n acc[item.id] = [item];\r\n }\r\n return acc;\r\n}, {})","IsDeferred":false},{"Name":"groupByReduce","Code":"groupByReduce(data, iteratee)","IsDeferred":false},{"Name":"groupByReduceBetter","Code":"groupByReduceBetter(data, iteratee)","IsDeferred":false},{"Name":"groupByHasOwnProperty","Code":"groupByHasOwnProperty(data, iteratee)","IsDeferred":false},{"Name":"groupByMapBetter","Code":"groupByMapBetter(data, iteratee)","IsDeferred":false},{"Name":"native direct","Code":"data.reduce((acc, v) =\u003E {\r\n const k = v.id;\r\n if(acc[k]) {\r\n acc[k].push(v);\r\n } else {\r\n acc[k] = [v];\r\n }\r\n return acc;\r\n }, {})","IsDeferred":false},{"Name":"native direct no copy","Code":"data.reduce((acc, v) =\u003E {\r\n if(acc[v.id]) {\r\n acc[v.id].push(v);\r\n } else {\r\n acc[v.id] = [v];\r\n }\r\n return acc;\r\n }, {})","IsDeferred":false},{"Name":"groupByHasOwnPropertyCall","Code":"groupByHasOwnProperty(data, iteratee)","IsDeferred":false},{"Name":"native direct no copy 2","Code":"data.reduce((acc, v) =\u003E {\r\n if(!acc[v.id]) {\r\n acc[v.id] = [];\r\n } \r\n acc[v.id].push(v);\r\n return acc;\r\n }, {})","IsDeferred":false},{"Name":"native direct 2","Code":"data.reduce((acc, v) =\u003E {\r\n const k = v.id;\r\n if(!acc[k]) {\r\n acc[k] = [];\r\n } \r\n acc[k].push(v);\r\n return acc;\r\n }, {})","IsDeferred":false}]}