2012-04-16 4 views
1

Я хочу сортировать как расстояние, так и название.tinysort jquery сортировать по двум позициям

(id) ----name---- ----distance---- 
    1  store   2 
    2  shop   3 
    3  market   1 
    4  bazaar   2 

#view 
<ul id="xanim"> 
    <% @objects.each do |obj| %> 
     <li><h3><%= obj.distance %></h3><%= obj.distance %> 
    <% end %> 
</ul> 

Использование tinysort (http://tinysort.sjeiti.com)

#javascript 
var $Ul = $('ul#xanim'); 
$Ul.css({position:'relative',height:$Ul.height(),display:'block'}); 
var iLnH; 
var $Li = $('ul#xanim>li'); 
$Li.each(function(i,el){ 
    var iY = $(el).position().top; 
    $.data(el,'h',iY); 
    if (i===1) iLnH = iY; 
}); 
$Li.tsort('h3:eq(0)',{order:'asc'}).each(function(i,el){ 
    var $El = $(el); 
    var iFr = $.data(el,'h'); 
    var iTo = i*iLnH; 
    $El.css({position:'absolute',top:iFr}).animate({top:iTo},500); 
}); 

У меня есть вид вниз хорошо, когда только собирается на один столбец (например, только по заказам дистанции:. Рынок, магазин, базар, магазин). Однако, если оба расстояния равны, я хочу также сортировать по названию (например, расстояние, а затем название: рынок, базар, магазин, магазин).

Как я могу сортировать по второстепенному компоненту, если первые равны?

ответ

0

Вам нужен стабильный алгоритм сортировки (http://www.algorithmist.com/index.php/Stable_Sort). Сначала сортируйте по второму компоненту (имени), затем по основному компоненту (расстоянию). Стабильная сортировка гарантирует, что элементы с одинаковым расстоянием все еще сортируются по имени.

Смежные вопросы