Сортировка элементов по количеству
Всем привет!
Стало необходимо написать скрипт для сортировки элементов (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> Сколько уже на листочке алгоритмов не рисовал - не получается. Помогите. :( |
Покажите, как сопоставлены названия и количество.
|
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>'); } }); }); Помогите сортировку по убыванию, и макс кол. |
Лимит сделал
$(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. |
Цитата:
|
Цитата:
- Делаешь массив типа var a=[{Name: 'продукт', All: N}] - вызываешь сортировку того массива a.sort(function (a, b){b.All-a.All}) - Формируешь результирующий хтмл |
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) }); |
Цитата:
В той теме много кто отписался своими вариантами... Ключевые коды я привёл... Остальное за оплату. :) |
Спасибо
|
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); |
Часовой пояс GMT +3, время: 13:48. |