Написал вариант, а потом увидел, что он почти совпадает с вариантом
ksa. Ну, всё равно выложу (проструктурировал получше, да и вывод результатов удобнее):
var arr = ['Сахар','Сахар','Молоко','Огурцы','Молоко','Молоко','Молоко','Мед','Огурцы','Сахар'],
tmp_obj = {}, tmp_arr = [], i, l = arr.length;
//заполняем временный объект и подсчитываем количество
for (i = 0; i < l; i ++) tmp_obj[arr[i]] = (tmp_obj[arr[i]] || 0) + 1;
//превращаем временный объект в массив, чтоб сортировать
for (i in tmp_obj) tmp_arr.push([i, tmp_obj[i]])
tmp_arr.sort(function(a,b){return b[1] - a[1]});
alert(tmp_arr.join('; '))