Наиболее часто встречающееся в заданном входном массиве число
Эта задача является учебной, но обратиться мне не к кому, по этому пишу сюда. Основную задачу по поиску элементов и их подсчету я выполнил. Логика моего решения была такова :
- Я преобразую массив в объект при помощи цикла.
- Достаю значения объекта (количество повторяющихся элементов)
- Функцией Math.max() я ищу наибольшее значение в массиве
- Ищу в объекте ключ по значению полученному из предыдущего пункта
Мой код :
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'.
Подскажите как мне достать для сравнения два ключа с одинаковыми значениями? Возможно я изначально всё усложнил, спасибо за понимание, надеюсь на развёрнутый ответ.