Наиболее часто встречающееся в заданном входном массиве число

Эта задача является учебной, но обратиться мне не к кому, по этому пишу сюда. Основную задачу по поиску элементов и их подсчету я выполнил. Логика моего решения была такова :

  1. Я преобразую массив в объект при помощи цикла.
  2. Достаю значения объекта (количество повторяющихся элементов)
  3. Функцией Math.max() я ищу наибольшее значение в массиве
  4. Ищу в объекте ключ по значению полученному из предыдущего пункта

Мой код :

 function highestRank(arr){
  let obj = {}
  arr.forEach(el => {
    obj[el] ? obj[el] += 1 : obj[el] = 1
  })
  let val = Object.values(obj)
  let max = Math.max(...val)
  let key = Object.keys(obj).find(key => obj[key] === max);
  return parseInt(key)
} 

Этот подход отлично отрабатывает если количество одинаковых элементов массива разное, но как только у двух разных ключей я получаю одинаковое количество совпадений мне необходимо сравнить эти ключи что бы вернуть наибольший из них.

Для примера:

[12, 10, 8, 12, 7, 6, 4, 10, 12]              вернет  12
[12, 10, 8, 12, 7, 6, 4, 10, 12, 10]          вернет  12
[12, 10, 8, 8, 3, 3, 3, 3, 2, 4, 10, 12, 10]  вернет   3

тут у меня всё отлично отрабатывает, но как только входящий массив содержит:

 [12,10,8,12,7,6,4,10,12,10] ('10':3, '12':3) должен вернуть 12

но у меня возвращается 10... Я понимаю, что скорее всего ломается на Math.max() так как логично предположить что максимальное число из [3, 3] будет 3 и при поиске по значениям объекта мне возвращается первое совпавшее значение 3 которое ведёт на ключ '10'.

Подскажите как мне достать для сравнения два ключа с одинаковыми значениями? Возможно я изначально всё усложнил, спасибо за понимание, надеюсь на развёрнутый ответ.


Ответы (0 шт):