Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.07.2012, 15:28
Аватар для RazZzeR
Кандидат Javascript-наук
Отправить личное сообщение для RazZzeR Посмотреть профиль Найти все сообщения от RazZzeR
 
Регистрация: 11.12.2011
Сообщений: 146

Сортировка массива по ключу
Добрый день!

Из базы данных мы получаем несколько тысяч строк,
и команда ORDER BY ну ооочень тормозит весь процесс,
поэтому ORDER BY снял с sql запроса,
и надобность сортировки массива по-прежнему остается.
Массив получаем в json, преобразуем в обычный массив,
получаем массив например
MusicArray

каждая строка массива MusicArray - еще один массив с 10ю ключами.

тоесть древо такое:

MusicArray = [
0:[123, 133, 1, 21231233123, 1323,213323,...,1231],
1:[321,231, 33, 2123,12323,21323]....123323],
2:[223,211, 95, 213123,1223,2213]....13223],
..........................
1024:[233,223, 7, 213123,11223,23123....132123]
] // конец MusicArray

внутри каждого массива (подобного 0:[123, 133, 12323, 21231233123, 1323,213323,...,1231])
значение 3его по счету ключа - номер, ко которому должен сортироваться массив MusicArray.

Проще: Сортируем массив MusicArray, по выделенному выше значению.

Заранее спасибо за помощь
Ответить с цитированием
  #2 (permalink)  
Старый 21.07.2012, 15:34
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var MusicArray = {
 "0":[123, 133, 1, 21231233123, 1323,213323,1231],
 "1":[321,231, 33, 2123,12323,21323,123323],
 "2":[223,211, 95, 213123,1223,2213,13223],
 "3":[233,223, 7, 213123,11223,23123,132123],
 length: 4
}

Array.prototype.sort.call( MusicArray, function( a, b ) {
    return a[2] > b[2] ? 1 : a[2] < b[2] ? -1 : 0;
});

alert( JSON.stringify( MusicArray ) );
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 21.07.2012, 16:03
Аватар для RazZzeR
Кандидат Javascript-наук
Отправить личное сообщение для RazZzeR Посмотреть профиль Найти все сообщения от RazZzeR
 
Регистрация: 11.12.2011
Сообщений: 146

Супер, работает отлично!
Это же просто шикарно, такая качественная оптимизация!
Devote, ну очень тебе благодарен, сколько раз уже помог)))

Последний раз редактировалось RazZzeR, 21.07.2012 в 16:23.
Ответить с цитированием
  #4 (permalink)  
Старый 21.07.2012, 18:19
Аватар для RazZzeR
Кандидат Javascript-наук
Отправить личное сообщение для RazZzeR Посмотреть профиль Найти все сообщения от RazZzeR
 
Регистрация: 11.12.2011
Сообщений: 146

Теперь та же задача, только сортировать по убыванию.
только вот в чем смысл: есть статус онлайн, и оффлайн.
тоесть int значение 1 и 0
Массив такой же как и пару постов выше, только ключ 6й,
надо сначала в массиве онлайн поднять, а все оффлайн снизу.

Это уже другой элемент оптимизируем
Ответить с цитированием
  #5 (permalink)  
Старый 21.07.2012, 18:26
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ну дык меняйте значения 1 и -1 в функции сортировки, они и сменют порядок.. а ключ вместо 2-ки впишите 5-ку
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 21.07.2012, 19:19
Аватар для RazZzeR
Кандидат Javascript-наук
Отправить личное сообщение для RazZzeR Посмотреть профиль Найти все сообщения от RazZzeR
 
Регистрация: 11.12.2011
Сообщений: 146

Array.prototype.sort.call(profile_friends, function(a,b){
return a[6] > b[6] ? -1 : a[6] < b[6] ? -1 : 0;
});

Получилось так, что в массиве сначало 1 оффлайн вверху, потом все онлайн, потом все оффлайн

тоесть вверху значение 6ого ключа равно 0, потом все строки массива со значением этого ключа 1, а потом снова все остальные со значением 0
Ответить с цитированием
  #7 (permalink)  
Старый 21.07.2012, 19:23
Аватар для RazZzeR
Кандидат Javascript-наук
Отправить личное сообщение для RazZzeR Посмотреть профиль Найти все сообщения от RazZzeR
 
Регистрация: 11.12.2011
Сообщений: 146

сделал так: заработало
Array.prototype.sort.call(profile_friends, function(a,b){
return a[6] > b[6] ? -1 : a[6] < b[6] ? +1 : 0;
});


еще раз: благодарен
Ответить с цитированием
  #8 (permalink)  
Старый 21.07.2012, 19:26
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

RazZzeR,
тебе же по шестому ключу надо было сортировать, а ты по седьмому сортируешь.. Индексы же с нуля начинаются, тоесть шестой ключ это значение 5.

Сообщение от RazZzeR
+1
ну плюс то тут не обязателен. достаточно просто 1
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 21.07.2012, 19:29
Аватар для RazZzeR
Кандидат Javascript-наук
Отправить личное сообщение для RazZzeR Посмотреть профиль Найти все сообщения от RazZzeR
 
Регистрация: 11.12.2011
Сообщений: 146

Сообщение от devote Посмотреть сообщение
RazZzeR,
тебе же по шестому ключу надо было сортировать, а ты по седьмому сортируешь.. Индексы же с нуля начинаются, тоесть шестой ключ это значение 5.
я раньше неправильно выразился
номер ключа 6, а номер ключа по счету - 7.
Ответить с цитированием
  #10 (permalink)  
Старый 21.07.2012, 19:31
Аватар для RazZzeR
Кандидат Javascript-наук
Отправить личное сообщение для RazZzeR Посмотреть профиль Найти все сообщения от RazZzeR
 
Регистрация: 11.12.2011
Сообщений: 146

Ааа, кстати! забыл рассказать:
сортировка отнимает очень много времени в sql.
ну очень.
было от 150ms - 600ms
сейчас всегда 50-60 ms
это очень хорошо.

плюс файловое кеширование поставим, давно пора)
каждый раз извлекать 500 - 1000 строк это извращение)))
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двумерного массива методом пузырька lammeR Общие вопросы Javascript 31 01.07.2012 20:48
Сортировка массива в JS методом пузырька mikhabor2372 Javascript под браузер 3 07.02.2012 21:51
сортировка массива Nightmare jQuery 4 26.01.2011 09:52
сортировка массива с сохранением ассоциации индексов HelpeR Элементы интерфейса 1 24.02.2010 11:00