# Function That Receives An Array Of Strings & Outputs Most Used String

I love the occasional programming challenge and yesterday I came across the following:

Create a function that receives an array of strings and outputs the most used string?

I pondered on this for awhile and in my mind thought of the following process:

1. Loop through each element of the original array;
2. Count the occurrences of each element by looping through the array again;
3. Sort the new array;
4. Output the new array’s first element.

However, looking at this I realised I was looping way too many times!

So I refactored my code such that it does the following:

``````function getModal( arr ) {
var maxCount = 0;
var result = "";
arr.reduce( function( p, el ) {
p[el] ? p[el] += 1 : p[el] = 1;
if ( p[el] > maxCount ) {
maxCount = p[el];
result = el;
}
return p;
}, {} );
return result;
}

var e = ["h","g","x", "d", "b", "h", "x", "i", "s", "g", "x", "p"];

console.log( getModal( e ) ); // => "x"``````

Notice how there’s only one looping array function used – `reduce`.

What this function does is take the array `arr` as a parameter, create two variables to measure the `maxCount` and another to take the `result`. As we then loop through the `arr` we assign each element (being a string) as a key to the new object created by `reduce` and make it’s property value equal to the count.

This makes counting the number of occurrences relatively easy.

All we then do is check whether the property value is greater than the `maxCount` value and if it is to make that value equal to the `maxCount` and the `result` equal to that element.

Once we’ve finished looping through the `arr` we then just simply output the `result`.

If we need to output the count of occurrences we could just change our code to output:

``````return {