 # To the Max: Using Math.min and .max

Being confronted with a series of numbers and having to find the largest or smallest in the set is a common coding task. While it’s entirely possible to use a mathematical operator in JavaScript to find an answer, or even a series of `if` statements, the `Math.max` function (and it’s opposite, `Math.min`) are more effective and efficient.

Unlike functions that you write for yourself, `Math.max` is a “built-in” function in JavaScript that you can use natively. Given a series of numbers os arguments, `Math.max` will always return the largest number. For example, in the console:

``````Math.max(5, 10, 11, 3, 22);
> 22``````

Note that `Math.max` can also take variables, or object properties:

``````let orbitalPeriod = new Object();
orbitalPeriod.Mercury = 87.97,
orbitalPeriod.Venus = 224.70,
orbitalPeriod.Mars = 686.98;
Math.max(orbitalPeriod.Mercury, orbitalPeriod.Venus, orbitalPeriod.Mars)
> 686.98``````

One thing it can’t do is automatically find the largest value in an array. This has traditionally required looping, comparing each value and preserving the greater. For browsers that support ES6, the `spread` operator is far more succinct:

``````let orbitalPeriods = [87.97, 224.70, 686.98],
longestOrbit = Math.max(... orbitalPeriods);``````

`Math.max` is often used to create an “either / or” result for some comparison. For example, if you were looking at screen sizes:

``let screenWidth = (screen.width, 0)``

The `screenWidth` variable, assigned via `let`, must resolve to a number: either the width of the screen or (if that test was unsuccessful, and does not yield a number) 0.

## Hitting the Lower Limit

`Math.min` is the opposite: given a series of values, `.min` finds the smallest.

``````Math.min(0.139, 0.15, 1);
> 0.139``````

`Math.min` is often used for setting or determining boundary conditions. For example, let’s say we have a ball bouncing inside a rectangular area. The right side of the rectangle is at 500 pixels; in a collision state with the ball, we want to the right side of the ball (`ball.right`) to be no further than the right side of the rectangle (`500`).

``let collide = Math.min(ball.right,500);``

Again, you can use `spread` to “distribute” the values in an array into the `Math.min` function. Given an array `bugSizes`, to find the smallest insect:

``Math.min(...bigSizes)``

Alternatively (and with greater browser support), use `apply` to achieve the same result:

``Math.min.apply(null, bigSizes);``

Like `spread`, the `apply` technique can also be used with `Math.max`.

Photograph by Iko, used under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Generic license