Объявите объект, arrсодержащий уникальный набор ключей. Заполните arr, пройдя по массиву один раз, используя карту. Если ключ не был ранее найден, добавьте ключ и присвойте нулевое значение. На каждой итерации увеличивайте значение ключа.
Данный testArray:
var testArray = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
решение:
var arr = {};
testArray.map(x=>{ if(typeof(arr[x])=="undefined") arr[x]=0; arr[x]++;});
JSON.stringify(arr) выведет
{"a":3,"b":2,"c":2,"d":2,"e":2,"f":1,"g":1,"h":3}
Object.keys(arr) вернется ["a","b","c","d","e","f","g","h"]
Чтобы найти вхождения любого элемента, например, b arr['b']выведет2