W.T.H. This was fun.
My version that fixes both flaws. Not as compact, but easier to understand, I hope:
Code:
<script type="text/javascript">
function zonk(a,b)
{
var m = a.length / b.length;
if (lgt <= m )
{
if ( lgt < m ) { nmb = [ ]; }
lgt = m;
nmb.push( b.replace(/,/g,"") );
}
}
//array to test
var arr=[1,41,222,33,40,18,22,41,2,2,42,27,58];
document.write('<hr/>In the array<br/>[' + arr + ']<br/>');
var lgt = 0;
var nmb = [ ];
var str = arr.sort();
str = "," + str.join(',,') + ","
str.replace( /(,\d+,)(\1+)/g, zonk );
document.write('the number(s) ' + nmb.join(" and ") + ' appear(s) '+lgt+' times<hr/>');
</script>