Вот мое решение этой проблемы, но с числами и с использованием новой функции «Установить». Это не очень эффективно, но мне определенно было весело писать это, и он поддерживает несколько максимальных значений.
const mode = (arr) => [...new Set(arr)]
.map((value) => [value, arr.filter((v) => v === value).length])
.sort((a,b) => a[1]-b[1])
.reverse()
.filter((value, i, a) => a.indexOf(value) === i)
.filter((v, i, a) => v[1] === a[0][1])
.map((v) => v[0])
mode([1,2,3,3]) // [3]
mode([1,1,1,1,2,2,2,2,3,3,3]) // [1,2]
Кстати, не используйте это для производства, это всего лишь иллюстрация того, как вы можете решить эту проблему только с помощью функций ES6 и Array.