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

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 'В массиве есть несколько часто повторяющихся чисел'

}