(перейдите в конец, чтобы найти весь код решения)

Поначалу задача кажется довольно простой, но поскольку вы здесь, я полагаю, вы обнаружили, что она немного сложна, но только если вы новичок в 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);

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