Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > сортировка


Автор: jmich 15.7.2008, 12:12
Помогите, пожалуйста сделать сортировку (javascript).

Нужно чтобы сортировка выглядела так:
7 день
6 день
5 день
тд 
24 часа
23 часа
22 часа 
21 час 
и тд 

var reminderNode = document.createElement("option");
reminderNode.setAttribute("id", ""+value+"-"+unit);
reminderNode.setAttribute("value", value);
reminderNode.setAttribute("unit", unit);
reminderNode.appendChild(document.createTextNode(l abel)); 
//alert('adding ' + reminderNode.id)
availableRemindersToSubmit.unshift(reminderNode);
// COLLECTION PARENTE
Ids.dojo_byId(availableRemindersId).appendChild(re minderNode);

value -это цифры;
unit- это часы и дни 


Я начала делать так, но это только по value сортировка получается, а как добавить чтобы сортировка была по дням сначала, а потом по часам?
function sortDesc(n1, n2)
{ 
var v1 = n1.value; 
var v2 = n2.value;
return (v2-v1); 

}

Автор: IDVsbruck 15.7.2008, 12:59
А зачем сортировка, если вставлять можно уже по порядку?

Если очень нужно, то value можно называть по количеству часов - от 1 до 24 понятно, потом "48", "72" и т.д. - тогда сортировать будет как надо.

Автор: jmich 15.7.2008, 13:04
сортировка нужна, тк у меня 2 контейнера, из одного в другой и обратно можно выбрать и передать все или некоторые данные. 
и сначала должны стоять дни, а потом часы 

Автор: IDVsbruck 15.7.2008, 13:10
Значит, подойдет второй вариант - при создании option задавай value по количеству часов, а при сортировке используй этот параметр.

Автор: jmich 15.7.2008, 13:12
все же хотелось бы создать динамическую функцию и использовать ее. 

Автор: ksnk 15.7.2008, 13:49
Вообще-то есть функция sort у массива. Вот ей и пользоваться... Как нибудь так: 
Код

var values=[
'7 день'
,'6 день'
,'5 день'
,'тд '
,'24 часа'
,'23 часа'
,'22 часа' 
,'21 час' 
]

alert(
values.sort(function(a,b){
  var xa=a.match(/^(\d+)\s(...)/),xb=b.match(/^(\d+)\s(...)/);
  if(!xa && !xb)     return 0;
  if(!xa && xb)     return 1;
  if(xa && !xb)     return -1;
  if(xa[2] == xb[2]) 
    return xa[1]==xb[1]?0: parseInt(xa[1])>parseInt(xb[1])?-1:1;

  if(xa[2] == 'ден') return 1;
  if(xb[2] == 'ден') return -1;
  return 0;
})
)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)