JavaScript | Какое число чаще всего встречается в массиве?

JavaScript | Какое число чаще всего встречается в массиве?

Перед решением задачи по поиску самого повторяющегося числа из массива 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 ‘В массиве есть несколько часто повторяющихся чисел’

}