сортировка sort
почему то не правильно сортирует
function sDecrease(i, ii){ // По убыванию if(i > ii) return -1; else if (i < ii) return 1; else return 0; } Вывело вот что 99,9,84,77,60,51,44,32,27,19 А как нужно вы наверное уже догадались!! |
Цитата:
|
qwermjk,
Вы сортировали строки а не числа поэтому такой результат. |
Цитата:
Всегда пишу сообщение на форуме быстрее чем нахожу ответ! |
Когда функция возвращает 1, то элементы меняются между собой?
Когда возвращает -1 то что? И когда 0, то не меняет?? сижу мозгую час, не могу более сложную функцию сортировки создать, по двум критериям |
Цитата:
|
У меня как то получилось, логически дошёл до этого!
var chat_sort2 = 1, chat_sort3 = 1; function chat_sort(){ // сортировка пользователей чата var chat_mas = []; $('#chat_list1 div').each(function(i){ chat_mas[i] = [$(this).attr('percent'), $(this).attr('status'), $(this).html()]; }); if(chat_sort2 == 1 && chat_sort3 == 1){ // все от 0 chat_mas.sort(function(a, b){ return a[0] - b[0]; }); } else if(chat_sort2 == 1 && chat_sort3 == 2){ // все от 100 chat_mas.sort(function(a, b){ return b[0] - a[0]; }); } else if(chat_sort2 == 2 && chat_sort3 == 1){ // чат от 0 chat_mas.sort(function(a, b){ if(a[1] == 2 && b[1] == 2) return a[0] - b[0]; if(a[1] == 2 && b[1] == 3) return -1; if(a[1] == 3 && b[1] == 2) return 1; if(a[1] == 3 && b[1] == 3) return a[0] - b[0]; return 0; }); } else if(chat_sort2 == 2 && chat_sort3 == 2){ // чат от 100 chat_mas.sort(function(a, b){ if(a[1] == 2 && b[1] == 2) return b[0] - a[0]; if(a[1] == 2 && b[1] == 3) return -1; if(a[1] == 3 && b[1] == 2) return 1; if(a[1] == 3 && b[1] == 3) return b[0] - a[0]; return 0; }); } else if(chat_sort2 == 3 && chat_sort3 == 1){ // игра от 0 chat_mas.sort(function(a, b){ if(a[1] == 2 && b[1] == 2) return a[0] - b[0]; if(a[1] == 2 && b[1] == 3) return 1; if(a[1] == 3 && b[1] == 2) return -1; if(a[1] == 3 && b[1] == 3) return a[0] - b[0]; return 0; }); } else if(chat_sort2 == 3 && chat_sort3 == 2){ // игра от 100 chat_mas.sort(function(a, b){ if(a[1] == 2 && b[1] == 2) return b[0] - a[0]; if(a[1] == 2 && b[1] == 3) return 1; if(a[1] == 3 && b[1] == 2) return -1; if(a[1] == 3 && b[1] == 3) return b[0] - a[0]; return 0; }); } var text_mas = ''; for(i=0; i<chat_mas.length; i++){ text_mas += '<div class="chat_user" percent="'+chat_mas[i][0]+'" status="'+chat_mas[i][1]+'">'+chat_mas[i][2]+'</div>'; } $('#chat_list1').html(text_mas); } |
qwermjk,
Жесть какая получилась. Этот кусок можно упростить: function (a, b) { if(a[1] == 2 && b[1] == 2) return a[0] - b[0]; if(a[1] == 2 && b[1] == 3) return -1; if(a[1] == 3 && b[1] == 2) return 1; if(a[1] == 3 && b[1] == 3) return a[0] - b[0]; return 0; } Получится всего лишь: function(a, b) { if(a[1] == b[1]) return a[0] - b[0]; return a[1] - b[1]; } |
Hoshinokoe,
Ну вот как получилось!! var chat_sort2 = 1, chat_sort3 = 1; function chat_sort(){ // сортировка пользователей чата var chat_mas = []; $('#chat_list1 div').each(function(i){ chat_mas[i] = [$(this).attr('percent'), $(this).attr('status'), $(this).html()]; }); if(chat_sort2 == 1 && chat_sort3 == 1){ // все от 0 chat_mas.sort(function(a, b){ return a[0] - b[0]; }); } else if(chat_sort2 == 1 && chat_sort3 == 2){ // все от 100 chat_mas.sort(function(a, b){ return b[0] - a[0]; }); } else if(chat_sort2 == 2 && chat_sort3 == 1){ // чат от 0 chat_mas.sort(function(a, b){ if(a[1] == b[1]) return a[0] - b[0]; return a[1] - b[1]; }); } else if(chat_sort2 == 2 && chat_sort3 == 2){ // чат от 100 chat_mas.sort(function(a, b){ if(a[1] == b[1]) return b[0] - a[0]; return a[1] - b[1]; }); } else if(chat_sort2 == 3 && chat_sort3 == 1){ // игра от 0 chat_mas.sort(function(a, b){ if(a[1] == b[1]) return a[0] - b[0]; return b[1] - a[1]; }); } else if(chat_sort2 == 3 && chat_sort3 == 2){ // игра от 100 chat_mas.sort(function(a, b){ if(a[1] == b[1]) return b[0] - a[0]; return b[1] - a[1]; }); } var text_mas = ''; for(i=0; i<chat_mas.length; i++){ text_mas += '<div class="chat_user" percent="'+chat_mas[i][0]+'" status="'+chat_mas[i][1]+'">'+chat_mas[i][2]+'</div>'; } $('#chat_list1').html(text_mas); } |
Часовой пояс GMT +3, время: 15:53. |