function getMostFrequentElement(inputArg) {
var type = typeof inputArg,
length,
mostFrequent,
counts,
index,
value;
if (inputArg === null || type === 'undefined') {
throw TypeError('inputArg was "null" or "undefined"');
}
mostFrequent = [];
if (type === 'function' || !Object.prototype.hasOwnProperty.call(inputArg, 'length')) {
mostFrequent[0] = inputArg;
mostFrequent[1] = 1;
} else {
counts = {};
length = inputArg.length;
for (index = 0; index < length; index += 1) {
value = inputArg[index];
type = typeof value;
counts[type] = counts[type] || {};
counts[type][value] = (counts[type][value] || 0) + 1;
if (!mostFrequent.length || counts[type][value] >= mostFrequent[1]) {
mostFrequent[0] = value;
mostFrequent[1] = counts[type][value];
}
}
}
return mostFrequent;
}
function logMostFrequentElement(inputArg) {
var mostFrequentElement,
element,
text;
try {
mostFrequentElement = getMostFrequentElement(inputArg)
if (mostFrequentElement.length) {
element = mostFrequentElement[0];
if (typeof element === 'string') {
element = '"' + element + '"';
}
text = element + ' ( ' + mostFrequentElement[1] + ' times )';
} else {
text = 'No elements';
}
} catch (e) {
text = e.message;
}
document.getElementById('out').appendChild(document.createTextNode(text + '\n'));
}
logMostFrequentElement();
logMostFrequentElement(1);
logMostFrequentElement(true);
logMostFrequentElement(function (x) { return x; });
logMostFrequentElement(/ab/g);
logMostFrequentElement([]);
logMostFrequentElement([1, 2]);
logMostFrequentElement([1, NaN, 2, NaN, 'NaN']);
logMostFrequentElement([1, Infinity, 2, Infinity, 'Infinity', -Infinity]);
logMostFrequentElement(['1', '2', 1, '2', 2]);
logMostFrequentElement([3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3]);
logMostFrequentElement([34, 'ab', 'ab', 'ab', 21, 34, 'ab', 34, 'ab', 21, 45, 99, 34]);
logMostFrequentElement('Also works with strings.');
<pre id="out"></pre>