First off am a beginner practicing my JavaScript. My solution to this problem will be posted. I think its worth mentioning this took almost two days of pondering to solve The Problem: I am required to write an algorithm that will return the mode(s) from the given input array. For example:
mode([4, 5, 6, 6, 6, 7, 7, 9, 10]) ➞ [6]
mode([4, 5, 5, 6, 7, 8, 8, 9, 9]) ➞ [5, 8, 9]
mode([1, 2, 2, 3, 6, 6, 7, 9]) ➞ [2, 6]
Solution:
function mode(nums) {
  let array = [...nums]
  array = array.sort((a, b) => a - b) //sorts the array from lowest value
  // function to figure out the unique numbers and return as an array
  function uniqueNums(array) {
    let uniques = []
    for (let i = 0; i < array.length; i++) {
      if (!uniques.includes(array[i])) {
        uniques.push(array[i])
      }
    }
    return uniques
  }
  //function to return the mode of every unique number
  function counter(array) {
    let modes = []
    for (let i = 0; i < array.length; i++) {
      let count = 1, // keeps track of occurrence's of a number
        track = 1 //variable enables the while loop keep checking
      while (array[i] === array[i + track]) {
        count++
        track++
      }
      modes.push(count)
      i += count - 1
    }
    return modes
  }
  //function to return the highest mode(s)
  function highestMode(uniques, modes) {
    let highest = [],
      max = 0 //tracks our highest number in the array
    //loops to find highest mode
    for (let i = 0; i < modes.length; i++) {
      if (max < modes[i]) {
        max = modes[i]
      }
    }
    //loops to push position of modes equal to the highest mode
    for (let i = 0; i < modes.length; i++) {
      if (max === modes[i]) {
        highest.push(i)
      }
    }
    //uses the position of highest modes to swap them with their 
    //actual values
    let result = highest.map(a => a = uniques[a])
    return result
  }
  return highestMode(uniqueNums(array), counter(array))
}
console.log(mode([4, 4, 4, 6, 8, 9, 10, 10])) 
     
     
    