Сортировка элементов по количеству
Всем привет!
Стало необходимо написать скрипт для сортировки элементов (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, время: 08:05. |