30.01.2013, 14:46
|
Профессор
|
|
Регистрация: 31.01.2010
Сообщений: 229
|
|
сортировка 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
А как нужно вы наверное уже догадались!!
|
|
30.01.2013, 14:53
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от qwermjk
|
Вывело вот что 99,9,84,77,60,51,44,32,27,19
|
http://javascript.ru/array/reverse
|
|
30.01.2013, 15:10
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
qwermjk,
Вы сортировали строки а не числа поэтому такой результат.
|
|
30.01.2013, 15:17
|
Профессор
|
|
Регистрация: 31.01.2010
Сообщений: 229
|
|
Сообщение от рони
|
Вы сортировали строки а не числа поэтому такой результат.
|
да я уже почитал!!
Всегда пишу сообщение на форуме быстрее чем нахожу ответ!
|
|
30.01.2013, 17:44
|
Профессор
|
|
Регистрация: 31.01.2010
Сообщений: 229
|
|
Когда функция возвращает 1, то элементы меняются между собой?
Когда возвращает -1 то что?
И когда 0, то не меняет??
сижу мозгую час, не могу более сложную функцию сортировки создать, по двум критериям
|
|
30.01.2013, 18:23
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
Сообщение от qwermjk
|
создать, по двум критериям
|
вместо нуля подставляйте сортировку по второму параметру
|
|
30.01.2013, 19:23
|
Профессор
|
|
Регистрация: 31.01.2010
Сообщений: 229
|
|
У меня как то получилось, логически дошёл до этого!
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);
}
|
|
30.01.2013, 19:50
|
Профессор
|
|
Регистрация: 08.01.2012
Сообщений: 253
|
|
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, 30.01.2013 в 19:53.
|
|
31.01.2013, 18:45
|
Профессор
|
|
Регистрация: 31.01.2010
Сообщений: 229
|
|
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);
}
|
|
|
|