Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.01.2013, 14:46
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 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
А как нужно вы наверное уже догадались!!
Ответить с цитированием
  #2 (permalink)  
Старый 30.01.2013, 14:53
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от qwermjk
Вывело вот что 99,9,84,77,60,51,44,32,27,19
http://javascript.ru/array/reverse
Ответить с цитированием
  #3 (permalink)  
Старый 30.01.2013, 15:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

qwermjk,
Вы сортировали строки а не числа поэтому такой результат.
Ответить с цитированием
  #4 (permalink)  
Старый 30.01.2013, 15:17
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 31.01.2010
Сообщений: 229

Сообщение от рони
Вы сортировали строки а не числа поэтому такой результат.
да я уже почитал!!
Всегда пишу сообщение на форуме быстрее чем нахожу ответ!
Ответить с цитированием
  #5 (permalink)  
Старый 30.01.2013, 17:44
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 31.01.2010
Сообщений: 229

Когда функция возвращает 1, то элементы меняются между собой?
Когда возвращает -1 то что?
И когда 0, то не меняет??
сижу мозгую час, не могу более сложную функцию сортировки создать, по двум критериям
Ответить с цитированием
  #6 (permalink)  
Старый 30.01.2013, 18:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от qwermjk
создать, по двум критериям
вместо нуля подставляйте сортировку по второму параметру
Ответить с цитированием
  #7 (permalink)  
Старый 30.01.2013, 19:23
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 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);
}
Ответить с цитированием
  #8 (permalink)  
Старый 30.01.2013, 19:50
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 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.
Ответить с цитированием
  #9 (permalink)  
Старый 31.01.2013, 18:45
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 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);
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
insertBefore и сортировка Mcqueen Events/DOM/Window 5 05.10.2012 13:01
Сортировка таблицы (даты) edmundantes Элементы интерфейса 4 17.05.2012 09:51
Сортировка и фильтрация json jQuery amt779 jQuery 4 28.07.2011 12:53
Сортировка картинок в броузере (дописать замыкание) mistercx Элементы интерфейса 1 05.06.2011 14:09
Сортировка числовых данных в таблице Vladsss Общие вопросы Javascript 15 01.09.2009 17:02