Перед решением задачи по поиску самого повторяющегося числа из массива JavaScript нужно для себя прояснить несколько условий, с которыми можно столкнуться.
Условие № 0 — Фильтрация массива на числа
Если в массиве есть объекты отличные от Number, то нам они не нужны их можно спокойно выбросить.
Условие № 1 — Массив пустой и в нём нет чисел
В этом случае можно вернуть строку «В массиве чисел нет»
Условие № 2 — Массив не пустой и в нём только одно число
В этом случае можно вернуть само это число так как оно единственное и встречается чаще чем те которых и вовсе нет.
Условие № 3 — Одно число повторяется более 1 раза
Возвращаем само число.
Условие № 4 — Массив не пустой и в нём все числа встречаются одинаковое количество раз
По сути весь массив состоит из уникальных значений, которые повторяются. Это может быть как одно число, так и несколько (как одно повторение, так и несколько).
В этом случае можно вернуть строку «Все числа уникальны».
Условие № 5 — Массив не пустой и в нём все числа встречаются не один раз, а несколько, но в равных пропорциях
Такая ситуация уже помогает отбросить часть результатов с меньшим числом повторений. Но как быть с теми числами, которые встречаются много, но одинаковое количество раз?
В этом случае можно вернуть строку «В массиве есть несколько часто повторяющихся чисел».
Условие № 6 — Идеальный сценарий, в котором только одно число повторяется больше всех остальных
В этом случае можно вернуть само число, а остальные выбросить.
Решение задачи по поиску частого числа в массиве
Сначала мы опишем всё в виде отдельной функции, а затем просто расширим стандартный набор методов для объектов Arryay.
function frequent_number(arr){
// Условие № 0 — Фильтрация массива на числа
let newarr = arr.filter(i=>i.constructor.name == ‘Number’)
// Условие № 1 — Массив пустой и в нём нет чисел
if(!newarr.length){return ‘В массиве чисел нет’}
// Условие № 2 — Массив не пустой и в нём только одно число
if(newarr.length==1){return `${newarr[0]}`}
// Условие № 3 — Одно число повторяется более 1 раза
if([…new Set(newarr)].length == 1){return `${newarr[0]}`}
// Условие № 4 — Массив не пустой и в нём все числа встречаются одинаковое количество раз
let a = […new Set([…new Set(newarr)].map(i=>newarr.filter(f=>f==i).length))].length
if(a == 1){return ‘Все числа уникальны могут повторяться одинаковое количество раз’}
// Условие № 6 — Идеальный сценарий, в котором только одно число повторяется больше всех остальных
let g = […new Set([…new Set(newarr)].map(i=>[i, newarr.filter(f=>f==i).length]))].sort((a,b)=>b[1]-a[1])
if(g[0][1]!=g[1][1]){return `${g[0][0]}`}
// Условие № 5 — Массив не пустой и в нём все числа встречаются не один раз, а несколько, но в равных пропорциях
return ‘В массиве есть несколько часто повторяющихся чисел’
}