Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   сортировка sort (https://javascript.ru/forum/misc/35094-sortirovka-sort.html)

qwermjk 30.01.2013 14:46

сортировка 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
А как нужно вы наверное уже догадались!!

Deff 30.01.2013 14:53

Цитата:

Сообщение от qwermjk
Вывело вот что 99,9,84,77,60,51,44,32,27,19

http://javascript.ru/array/reverse

рони 30.01.2013 15:10

qwermjk,
Вы сортировали строки а не числа поэтому такой результат.

qwermjk 30.01.2013 15:17

Цитата:

Сообщение от рони
Вы сортировали строки а не числа поэтому такой результат.

да я уже почитал!!
Всегда пишу сообщение на форуме быстрее чем нахожу ответ!

qwermjk 30.01.2013 17:44

Когда функция возвращает 1, то элементы меняются между собой?
Когда возвращает -1 то что?
И когда 0, то не меняет??
сижу мозгую час, не могу более сложную функцию сортировки создать, по двум критериям

рони 30.01.2013 18:23

Цитата:

Сообщение от qwermjk
создать, по двум критериям

вместо нуля подставляйте сортировку по второму параметру

qwermjk 30.01.2013 19:23

У меня как то получилось, логически дошёл до этого!
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);
}

Hoshinokoe 30.01.2013 19:50

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];
}

qwermjk 31.01.2013 18:45

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.