Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
GroupBy
Lodash vs Ramda
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36
Browser:
Chrome 136
Operating system:
Mac OS X 10.15.7
Device Platform:
Desktop
Date tested:
11 months ago
Test name
Executions per second
Lodash groupBy
4511.0 Ops/sec
Ramda groupBy
2792.8 Ops/sec
Hand written
4413.2 Ops/sec
Using Reduce
6401.6 Ops/sec
HTML Preparation code:
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
Script Preparation code:
function Rand(x) { return Math.floor(Math.random() * x); } const arr = R.map(x => { return {room: {name: Rand(x)}, structureType: Rand(x)}; }, R.repeat(30, 10000)); function GetArray() { return arr; } function SortMyStructs() { Game = {}; Game.structures = GetArray(); Game.mStructs = { }; Game.mStructs.mRooms = { }; Game.mObservers = [ ]; for (let structIter in Game.structures) { const structure = Game.structures[structIter]; const roomName = structure.room.name; const type = structure.structureType; if (undefined === Game.mStructs.mRooms[roomName]) { Game.mStructs.mRooms[roomName] = { }; Game.mStructs.mRooms[roomName].mAll = [ ]; Game.mStructs.mRooms[roomName].mType = { }; } Game.mStructs.mRooms[roomName].mAll.push(structure); if (undefined === Game.mStructs.mRooms[roomName].mType[type]) { Game.mStructs.mRooms[roomName].mType[type] = [ ]; } Game.mStructs.mRooms[roomName].mType[type].push(structure); } };
Tests:
Lodash groupBy
const tmp = _.groupBy(GetArray(), x => x.room.name); const tmp2 = _.forEach(tmp, (val, key) => tmp[key] = _.groupBy(tmp[key], x => x.structureType)); tmp2;
Ramda groupBy
R.pipe( R.groupBy(x => x.room.name), R.map(R.groupBy(x => x.structureType)) )(GetArray());
Hand written
SortMyStructs();
Using Reduce
_.reduce(GetArray(), (acc, x) => { if (!acc.mRooms) acc.mRooms = {}; if (!acc.mRooms[x.room.name]) acc.mRooms[x.room.name] = {mAll: [], mType: {}}; acc.mRooms[x.room.name].mAll.push(x); if (!acc.mRooms[x.room.name].mType[x.structureType]) acc.mRooms[x.room.name].mType[x.structureType] = []; acc.mRooms[x.room.name].mType[x.structureType].push(x); return acc; }, {});