First of all, while browsing, I couldn’t find the most effective and short solution to find the most frequent element in an array but I only found a lot of long solutions with for loop however the best way is** not using nested for loop.** Because in Big O Notation, it’s a O(n2)
complexity which means it is not effective.
The best way to find the most frequent element in an array is by using reduce function and creating a hashmap. And that’s the whole code you need:
function getMostFrequent(arr) {
const hashmap = arr.reduce( (acc, val) => {
acc[val] = (acc[val] || 0 ) + 1
return acc
},{})
return Object.keys(hashmap).reduce((a, b) => hashmap[a] > hashmap[b] ? a : b)
}
What I did was, creating a hashmap using reduce. If we have an array like [‘john’, ‘doe’, ’john’, ’bilge’]
, our hashmap will look like this:
Because we create an object using acc in the first reduce function, notice the initial value of acc
is {}.
Then we check for each value of the array: is this value already in acc
?
If no, put a key-value pair in the object. ( first appearance of the element)
If yes, increment the value of it.
#programming #javascript #coding