21.07.2012, 15:28
|
|
Кандидат Javascript-наук
|
|
Регистрация: 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, по выделенному выше значению.
Заранее спасибо за помощь
|
|
21.07.2012, 15:34
|
что-то знаю
|
|
Регистрация: 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 ) );
|
|
21.07.2012, 16:03
|
|
Кандидат Javascript-наук
|
|
Регистрация: 11.12.2011
Сообщений: 146
|
|
Супер, работает отлично!
Это же просто шикарно, такая качественная оптимизация!
Devote, ну очень тебе благодарен, сколько раз уже помог)))
Последний раз редактировалось RazZzeR, 21.07.2012 в 16:23.
|
|
21.07.2012, 18:19
|
|
Кандидат Javascript-наук
|
|
Регистрация: 11.12.2011
Сообщений: 146
|
|
Теперь та же задача, только сортировать по убыванию.
только вот в чем смысл: есть статус онлайн, и оффлайн.
тоесть int значение 1 и 0
Массив такой же как и пару постов выше, только ключ 6й,
надо сначала в массиве онлайн поднять, а все оффлайн снизу.
Это уже другой элемент оптимизируем
|
|
21.07.2012, 18:26
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
ну дык меняйте значения 1 и -1 в функции сортировки, они и сменют порядок.. а ключ вместо 2-ки впишите 5-ку
|
|
21.07.2012, 19:19
|
|
Кандидат Javascript-наук
|
|
Регистрация: 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
|
|
21.07.2012, 19:23
|
|
Кандидат Javascript-наук
|
|
Регистрация: 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;
});
еще раз: благодарен
|
|
21.07.2012, 19:26
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
RazZzeR,
тебе же по шестому ключу надо было сортировать, а ты по седьмому сортируешь.. Индексы же с нуля начинаются, тоесть шестой ключ это значение 5.
ну плюс то тут не обязателен. достаточно просто 1
|
|
21.07.2012, 19:29
|
|
Кандидат Javascript-наук
|
|
Регистрация: 11.12.2011
Сообщений: 146
|
|
Сообщение от devote
|
RazZzeR,
тебе же по шестому ключу надо было сортировать, а ты по седьмому сортируешь.. Индексы же с нуля начинаются, тоесть шестой ключ это значение 5.
|
я раньше неправильно выразился
номер ключа 6, а номер ключа по счету - 7.
|
|
21.07.2012, 19:31
|
|
Кандидат Javascript-наук
|
|
Регистрация: 11.12.2011
Сообщений: 146
|
|
Ааа, кстати! забыл рассказать:
сортировка отнимает очень много времени в sql.
ну очень.
было от 150ms - 600ms
сейчас всегда 50-60 ms
это очень хорошо.
плюс файловое кеширование поставим, давно пора)
каждый раз извлекать 500 - 1000 строк это извращение)))
|
|
|
|