Показать сообщение отдельно
  #21 (permalink)  
Старый 09.10.2011, 08:57
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

aiky,
наверное, все тут сговорились вас огорчать :-), но всё-таки кириллицу в ключах лучше не использовать. У меня от этого были проблемы в Опере. Предположительно, этих проблем можно было бы избежать с помощью Юникод. Но наверняка я этого не знаю, поэтому решил проблему радикально - с помощью escape. В нашем случае можно делать примерно так:
var arr = ['Сахар','Сахар','Молоко','Огурцы','Молоко','Молоко','Молоко','Мед','Огурцы','Сахар'],
tmp = [], names = {}, out = '', l = arr.length, i = j = -1, k,

cmp = function(a, b) {return b[1] - a[1]},

add = function (name) {
	//список уникальных имён
	if (!(name in names)) names[name] = ++j
	k = tmp[names[name]]
	//пополняем массив сортировки (или количество в существующем элементе)
	tmp[names[name]] = [k && k[0] || unescape(name), (k && k[1] || 0) + 1]
};

while (++i < l) add(escape(arr[i]))
tmp.sort(cmp)
alert(tmp.join('; '))
Ответить с цитированием