Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.10.2011, 02:10
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Сортировка элементов по количеству
Всем привет!
Стало необходимо написать скрипт для сортировки элементов (div) по количеству.

Например:

Есть список названий..

<div class="tops">Сахар</div>
<div class="tops">Сахар</div>
<div class="tops">Молоко</div>
<div class="tops">Огурцы</div>
<div class="tops">Молоко</div>
<div class="tops">Мед</div>
<div class="tops">Огурцы</div>
<div class="tops">Сахар</div>


Необходимо подсчитать количество одинаковых продуктов и отсортировать их по убыванию.

Получится:

Так как сахара 3 шт. - 1-ое место.
Так как молока 2 шт. - 2-ое место.
Так как огурцов 2 шт. - 3-е место.
Так как меда 1 шт. - 4-ое место.

Максимальное количество выводимых продуктов - 5;

<div class="tops">1. Сахар</div>
<div class="tops">2. Молоко</div>
<div class="tops">3. Огурцы</div>
<div class="tops">4. Мед</div>


Сколько уже на листочке алгоритмов не рисовал - не получается.
Помогите.
Ответить с цитированием
  #2 (permalink)  
Старый 07.10.2011, 02:52
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Покажите, как сопоставлены названия и количество.
Ответить с цитированием
  #3 (permalink)  
Старый 07.10.2011, 03:03
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

FINoM,
В каком смысле?

Вот написал скрипт... Только пока сортировки по кол. нету и ограничение на кол.

HTML:
<div style="display:none">
  <div class="tAuthor">Сахар</div>
  <div class="tAuthor">Сахар</div>
  <div class="tAuthor">Молоко</div>
  <div class="tAuthor">Сахар</div>
  <div class="tAuthor">Мед</div>
  <div class="tAuthor">Сахар</div>
  <div class="tAuthor">Молоко</div>
  <div class="tAuthor">Сахар</div>
  <div class="tAuthor">Молоко</div>
  <div class="tAuthor">Огурцы</div>
  <div class="tAuthor">Мед</div>
</div>

<div class="twoss" title="Тут создается новый список"></div>


JS:
$(function () {
    $('.tAuthor').each(function(i){
         var names = $(this).html();
         var usi = $('.tAuthor2:contains('+names+')').html();
         if(names!=usi) {
           var aa = $('.tAuthor:contains('+names+')').length;
           $('.twoss').append('<b class="tAuthor2">'+names+'</b>, '+aa+'<br>');
         }
    });
});


Помогите сортировку по убыванию, и макс кол.

Последний раз редактировалось Dorian_bs, 07.10.2011 в 03:13.
Ответить с цитированием
  #4 (permalink)  
Старый 07.10.2011, 03:16
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Лимит сделал
$(function () {
    $('.tAuthor').each(function(i){
         var names = $(this).html();
         var usi = $('.tAuthor2:contains('+names+')').html();
         var aa2 = $('.tAuthor2').length;
         if(names!=usi && aa2<5) {
           var aa = $('.tAuthor:contains('+names+')').length;
           $('.twoss').append('<b class="tAuthor2">'+names+'</b>, '+aa+'<br>');
         }
    });
});

Осталось сортировку..

Как я понимаю, сейчас необходимо добавлять элементы через append и prepend.
Если Больше макс. значения - prepend, а если меньше - append.

Последний раз редактировалось Dorian_bs, 07.10.2011 в 03:19.
Ответить с цитированием
  #5 (permalink)  
Старый 07.10.2011, 05:57
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Dorian_bs
В каком смысле?
Извините, не врубился. Сейчас 5 утра, я вам не отвечу, тем более на код с переменными usi, aa, aa2
Ответить с цитированием
  #6 (permalink)  
Старый 07.10.2011, 08:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от Dorian_bs
Сколько уже на листочке алгоритмов не рисовал - не получается.
Алгоритм стандартный:
- Делаешь массив типа
var a=[{Name: 'продукт', All: N}]

- вызываешь сортировку того массива
a.sort(function (a, b){b.All-a.All})

- Формируешь результирующий хтмл
Ответить с цитированием
  #7 (permalink)  
Старый 07.10.2011, 12:20
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

ksa,
Спасибо)
Не могли бы Вы привести пример использования в данном случае?

Вот изменил скрипт. Теперь все данные заносятся в массив.
Как их теперь отсортировать? И удалить повторяющиеся?
Читал про jQuery.unique, но не понял его применения..
А для сортировки, если прописать "array.sort(function (a, b){b.All-a.All})" - не работает.

$(function () {
 var array = [];
 $('.tAuthor').each(function(i){
    var Name = $(this).html();
    var NumRep = $('.tAuthor:contains('+Name+')').length;
    var hash = {'Name': Name,'All': NumRep}
    var rezArr = array.push(hash);
    array.sort(function (a, b){b.All-a.All});
 });
 console.log(array)
});

Последний раз редактировалось Dorian_bs, 07.10.2011 в 13:40.
Ответить с цитированием
  #8 (permalink)  
Старый 07.10.2011, 13:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от Dorian_bs
Не могли бы Вы привести пример использования
Давот только недавно предлогалось несколько вариантов аналогичной сортировки.
В той теме много кто отписался своими вариантами... Ключевые коды я привёл... Остальное за оплату.
Ответить с цитированием
  #9 (permalink)  
Старый 07.10.2011, 13:49
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Спасибо
Ответить с цитированием
  #10 (permalink)  
Старый 07.10.2011, 23:16
Аватар для aiky
Аспирант
Отправить личное сообщение для aiky Посмотреть профиль Найти все сообщения от aiky
 
Регистрация: 06.04.2010
Сообщений: 90

var arr = ['Сахар','Сахар','Молоко','Огурцы','Молоко','Мед','Огурцы','Сахар'];
arr.sort();

var cur = arr[0];
var k = 1;
var tmp = {
	'arr':[],
	'hash':{},
	'add':function(k,val){
		if(!tmp.hash[k]){
			tmp.hash[k] = [];
			tmp.arr.push(k);
		}
		tmp.hash[k].push(val);
	}
}

for(var i = 1; i < arr.length; i++){
	if(arr[i] !== cur){
		tmp.add(k,cur);
		cur = arr[i];
		k = 1;
	}
	else k++;
}
tmp.add(k,cur);
tmp.arr.sort(function(a,b){return b - a});

arr = [];
for(var i = 0; i < tmp.arr.length; i++)
  for(var j = 0; j < tmp.hash[tmp.arr[i]].length; j++) arr.push(tmp.hash[tmp.arr[i]][j]);

delete cur;
delete k;
delete tmp;

alert(arr);

Последний раз редактировалось aiky, 07.10.2011 в 23:20.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элементов через splice. возможно ли оптимизировать? Storan Общие вопросы Javascript 0 01.10.2011 21:16
Вывод переменного по количеству элементов массива из json ArmagedDance Элементы интерфейса 4 08.06.2011 10:45
Как ограничить количество элементов (списков <li>) массивов Naum Элементы интерфейса 2 04.04.2011 11:56
Сделать список multiple select с сортировкой элементов Nargiza Элементы интерфейса 2 17.08.2010 14:44
Сортировка элементов списка тупым способом ururu Events/DOM/Window 9 11.01.2010 01:41