snippetjavascriptTip
Min and max value of a JavaScript array
Viewed 0 times
javascriptminandvaluemaxarray
Problem
When working with numeric arrays in JavaScript, you might find yourself in need of finding the minimum or maximum value. Luckily, JavaScript's
What if you need to find the
For either one of the operations, we'll first need to sort the array in ascending or descending order. This can be done using
Then, we can use
For more complex cases, such as finding the min/max value in an array of objects, you will have to use
Math built-in object has got you covered. You can simply use Math.min() or Math.max() combined with the spread operator (...), as both functions accept any number of arguments.What if you need to find the
n minimum or maximum values? Turns out it's almost as easy.For either one of the operations, we'll first need to sort the array in ascending or descending order. This can be done using
Array.prototype.sort() and the appropriate comparator function. However, we'll need to create a shallow clone of the array first using the spread operator (...) to avoid mutating the original array.Then, we can use
Array.prototype.slice() to get the first n elements of the sorted array. If n is not provided, we'll get the first element of the array. If n is greater than or equal to the length of the array, we'll get the original array back.For more complex cases, such as finding the min/max value in an array of objects, you will have to use
Array.prototype.map(). Given an appropriate function or a property name, you can map the array to an array of values and then use the same approach as above.Solution
const nums = [2, 4, 6, 8, 1, 3, 5, 7];
Math.max(...nums); // 8
Math.min(...nums); // 1For either one of the operations, we'll first need to sort the array in ascending or descending order. This can be done using
Array.prototype.sort() and the appropriate comparator function. However, we'll need to create a shallow clone of the array first using the spread operator (...) to avoid mutating the original array.Then, we can use
Array.prototype.slice() to get the first n elements of the sorted array. If n is not provided, we'll get the first element of the array. If n is greater than or equal to the length of the array, we'll get the original array back.For more complex cases, such as finding the min/max value in an array of objects, you will have to use
Array.prototype.map(). Given an appropriate function or a property name, you can map the array to an array of values and then use the same approach as above.Code Snippets
const nums = [2, 4, 6, 8, 1, 3, 5, 7];
Math.max(...nums); // 8
Math.min(...nums); // 1const minN = (arr, n = 1) => [...arr].sort((a, b) => a - b).slice(0, n);
const maxN = (arr, n = 1) => [...arr].sort((a, b) => b - a).slice(0, n);
minN([1, 2, 3]); // [1]
minN([1, 2, 3], 2); // [1, 2]
maxN([1, 2, 3]); // [3]
maxN([1, 2, 3], 2); // [3, 2]const minBy = (arr, fn) =>
Math.min(...arr.map(typeof fn === 'function' ? fn : val => val[fn]));
const maxBy = (arr, fn) =>
Math.max(...arr.map(typeof fn === 'function' ? fn : val => val[fn]));
minBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], x => x.n); // 2
minBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], 'n'); // 2
maxBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], x => x.n); // 8
maxBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], 'n'); // 8Context
From 30-seconds-of-code: array-min-max
Revisions (0)
No revisions yet.