Сортировка массива по ключу
Добрый день! :thanks:
Из базы данных мы получаем несколько тысяч строк, и команда 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, по выделенному выше значению. Заранее спасибо за помощь :thanks: |
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 ) ); |
Супер, работает отлично!
Это же просто шикарно, такая качественная оптимизация! :) Devote, ну очень тебе благодарен, сколько раз уже помог))) |
Теперь та же задача, только сортировать по убыванию.
только вот в чем смысл: есть статус онлайн, и оффлайн. тоесть int значение 1 и 0 Массив такой же как и пару постов выше, только ключ 6й, надо сначала в массиве онлайн поднять, а все оффлайн снизу. Это уже другой элемент оптимизируем :) |
ну дык меняйте значения 1 и -1 в функции сортировки, они и сменют порядок.. а ключ вместо 2-ки впишите 5-ку
|
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 |
сделал так: заработало
Array.prototype.sort.call(profile_friends, function(a,b){ return a[6] > b[6] ? -1 : a[6] < b[6] ? +1 : 0; }); еще раз: благодарен :thanks: |
RazZzeR,
тебе же по шестому ключу надо было сортировать, а ты по седьмому сортируешь.. Индексы же с нуля начинаются, тоесть шестой ключ это значение 5. Цитата:
|
Цитата:
номер ключа 6, а номер ключа по счету - 7. :) |
Ааа, кстати! забыл рассказать:
сортировка отнимает очень много времени в sql. ну очень. было от 150ms - 600ms сейчас всегда 50-60 ms это очень хорошо. плюс файловое кеширование поставим, давно пора) каждый раз извлекать 500 - 1000 строк это извращение))) |
Часовой пояс GMT +3, время: 03:17. |