(перейдите в конец, чтобы найти весь код решения)
Поначалу задача кажется довольно простой, но поскольку вы здесь, я полагаю, вы обнаружили, что она немного сложна, но только если вы новичок в Javascript или столкнулись с проблемой такого типа впервые.
Как вы скоро узнаете, решение настолько простое, как вы и ожидали, и включает в себя использование наших старых добрых объектов.
Возьмем массив:
const arr = ['foo','bar','foo','foo','foo','moo','bar','moo'];
Нам нужно подсчитать количество вхождений каждого элемента в массиве.
Посмотрим, как мы к этому подойдем.
Как мы видим, нам придется пройтись по массиву, и каждый раз, когда элемент повторяется, нам придется увеличивать его количество. А в OOPS мы можем использовать объекты для создания пар ключ-значение, поэтому мы собираемся хранить количество элементов в объекте, где ключи являются самими элементами.
let trackObj = {}; //we declare an empty tracker Object
Перебор массива:
Мы проверяем, существует ли уже текущий элемент в качестве ключа в нашем объекте. Если нет, мы объявляем его и присваиваем ему значение 1. Если элемент уже существует, мы увеличиваем значение ключа.
arr.forEach(cur => {
if( !trackObj[cur] )
trackObj[cur]
else
trackObj[cur]++;
});
И это все!
trackObj теперь содержит каждый элемент и количество раз, когда он встречается в массиве.
console.log(trackObj);

Итак, теперь у нас есть объект вхождений всех элементов.
Но что, если нам нужно найти элемент с максимальным количеством вхождений?
Считайте эту часть бонусом :3
Мы создадим 2 новые переменные maxCount = 0 и maxElement для хранения максимального значения вхождения и связанного с ним элемента.
Теперь мы проверяем в том же методе forEach if (trackObj[cur] › maxCount), и если это так, мы назначаем maxCount как trackObj[cur] и maxElement как cur.
Таким образом, мы можем просто изменить существующий цикл for следующим образом:
let maxCount = 0, maxElement; // create two other variables
arr.forEach(cur => {
if( !trackObj[cur] )
trackObj[cur]
else
trackObj[cur]++;
// ADDED CODE
if(trackObj[cur] > maxCount)
{
maxCount = trackObj[cur];
maxElement = cur;
}
});
И это все! …снова
console.log(maxElement , maxCount);

Теперь вы это знаете.