Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
Min/max for array
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0
Browser:
Firefox 133
Operating system:
Windows
Device Platform:
Desktop
Date tested:
one year ago
Test name
Executions per second
Math.min/max with spread
584868.8 Ops/sec
forEach
1667455.8 Ops/sec
Reducer
1818343.2 Ops/sec
forEach with hasValidValues in loop
1026389.4 Ops/sec
apply
687929.1 Ops/sec
Script Preparation code:
var data = [ ...Array(100).keys() ].map(() => { let value = Math.floor(Math.random() * 10000); if(value > 9000) return {value: null}; return {value}; });
Tests:
Math.min/max with spread
let testData = data.map(d => d['value']).filter(d => d != null); let hasValidValues = testData.length > 0; var min = Math.min(...testData); var max = Math.max(...testData);
forEach
let min = Number.MAX_VALUE; let max = Number.MIN_VALUE; let hasValidValues = data.some(d => d['value']); data.forEach(obj => { const value = obj['value']; if (value == null) return; if (value < min) min = value; if (value > max) max = value; });
Reducer
let hasValidValues = data.some(d => d['value'] != null); const res = data.reduce((acc, d) => { const value = d['value']; if(value != null){ if (value < acc.mmin) acc.min = value; if (value > acc.max) acc.max = value; } return acc; }, {min: Number.MAX_VALUE, max: Number.MIN_VALUE});
forEach with hasValidValues in loop
let min = Number.MAX_VALUE; let max = Number.MIN_VALUE; let hasValidValues = false; data.forEach(obj => { if ('value' in obj) { const value = obj['value']; if (value === null) return; hasValidValues = true; if (value < min) min = value; if (value > max) max = value; } });
apply
let testData = data.map(d => d['value']).filter(d => d != null); let hasValidValues = testData.length > 0; var min = Math.min.apply(null, testData); var max = Math.max.apply(null, testData);