Removing the largest number from an array

Posted on

We can remove all instances of the largest number in an array by combining Math.max() and Array.prototype.filter().

We first need to know which number we have to remove. Since we cannot rely on the array being sorted, we have to use Math.max() to find that number.

const max = Math.max(16, 4, 23, 15, 42, 8)
// ⇒ 42
const max = Math.max(16, 4, 23, 15, 42, 8)
// ⇒ 42

Math.max() accepts an unspecified number of parameters instead of a single array. To pass an array to it, we need to spread it using the spread operator ....

const numbers = [16, 4, 23, 15, 42, 8]
const max = Math.max(...numbers)
// ⇒ 42
const numbers = [16, 4, 23, 15, 42, 8]
const max = Math.max(...numbers)
// ⇒ 42

Once we know the largest number, we can use Array.prototype.filter() to filter that value from the array. We get a copy of the original array with only the numbers that are not the largest value.

const numbers = [16, 4, 23, 15, 42, 8]
const max = Math.max(...numbers)
numbers.filter((number) => number !== max)
// ⇒ [16, 4, 23, 15, 8]
const numbers = [16, 4, 23, 15, 42, 8]
const max = Math.max(...numbers)
numbers.filter((number) => number !== max)
// ⇒ [16, 4, 23, 15, 8]

By putting this logic in a helper function, we can quickly remove the largest value from any number of arrays.

// removes the largest value from an array of numbers
function removeMax(numbers) {
  // get this first so we only need to calculate it once
  const max = Math.max(...numbers)
 
  // create a new array from all numbers that are NOT `max`
  return numbers.filter((number) => number !== max)
}
// removes the largest value from an array of numbers
function removeMax(numbers) {
  // get this first so we only need to calculate it once
  const max = Math.max(...numbers)
 
  // create a new array from all numbers that are NOT `max`
  return numbers.filter((number) => number !== max)
}

We can use this function to remove the largest number from any numerical array in a single line. If the largest value appears more than once, all instances are removed.

// remove the largest number from our example
removeMax([16, 4, 23, 15, 42, 8])
// ⇒ [16, 4, 23, 15, 8]
 
// it removes multiple instances of the same largest number
removeMax([12, 27, 8, 9, 41, 33, 41, 29])
// ⇒ [12, 27, 8, 9, 33, 29]
 
// if all numbers are the maximum, it returns an empty array
removeMax([5, 5, 5, 5, 5, 5, 5])
// ⇒ []
 
// it works with negative numbers as well
removeMax([-5, -2, -8, -1, -10])
// ⇒ [-5, -2, -8, -10]
// remove the largest number from our example
removeMax([16, 4, 23, 15, 42, 8])
// ⇒ [16, 4, 23, 15, 8]
 
// it removes multiple instances of the same largest number
removeMax([12, 27, 8, 9, 41, 33, 41, 29])
// ⇒ [12, 27, 8, 9, 33, 29]
 
// if all numbers are the maximum, it returns an empty array
removeMax([5, 5, 5, 5, 5, 5, 5])
// ⇒ []
 
// it works with negative numbers as well
removeMax([-5, -2, -8, -1, -10])
// ⇒ [-5, -2, -8, -10]

We can create a removeMin function by replacing Math.max() with Math.min().

Debug
none
Grid overlay