Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.06.2012, 18:05
Новичок на форуме
Отправить личное сообщение для Евгений7 Посмотреть профиль Найти все сообщения от Евгений7
 
Регистрация: 10.06.2012
Сообщений: 9

Сортировка массива
Приветик всем. Извиняюсь если пишу не в тот форум, у меня следующая проблема. Создаю запрос с помощью AJAX, получаю данные из базы и вывожу их в динамическом селекте. Сортировка из базы идёт по возрастанию значения, например "id=1 value= А", "id=2 value= C" "id=3 value= D" "id=4 value=B". Это данные в БД (есть поле id и поле value). При выборке из базы конечно же написано ORDER BY 'value'. Мне надо вывести значения в селекте по возрастанию (точнее вместо букв могут быть слова, но всё равно сортировка нужна по алфавиту). Итак что я имею: данные в базе, указанные выше и код:
for(var idx in selects){
            var opts = new Array();
            for(i in selects[idx].opts){
                opts[i]=selects[idx].opts[i];
//console.log(opts[i]); 
//Здесь данные приходят отсортированные по возрастанию значения (по алфавиту, либо по цифрам, но не по id, т.е. всё верно)
            }
//console.log(opts);
// а вот в opts значения уже отсортированы по id, т.е. при переборе массива данные идут в правильном порядке, а после полного создания массива отсортированы по id.

В итоге при создании селекта значения выводятся в таком порядке: A, C, D, B. Нужно сделать так: A, B, C, D.
В selects пришедшие данные в JSON. Как сделать так, чтобы массив был сформирован не по id а по значениям?
Есть советы?
Ответить с цитированием
  #2 (permalink)  
Старый 10.06.2012, 18:13
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var selects = [
{ id: 1, value: "Anton" },
{ id: 2, value: "Dima" },
{ id: 3, value: "Borya" },
{ id: 4, value: "Carl" }
]

selects.sort(function( a, b ){
    return a.value > b.value ? 1 : ( a.value < b.value ? -1 : 0 );
});

for( var idx in selects ) {
    alert( selects[ idx ].value );
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 10.06.2012, 18:22
Новичок на форуме
Отправить личное сообщение для Евгений7 Посмотреть профиль Найти все сообщения от Евгений7
 
Регистрация: 10.06.2012
Сообщений: 9

Совсем забыл сказать, что JS я не понимаю вообще, методом тыка учусь, сколько не пытался понять не смог. Поэтому даже не могу понять откуда взялись ф-ии a и b и где они написаны.. Т.е. Ваш пример мне абсолютно не понятен, как применить его к моему коду? И alert мне как бы не нужен, мне надо просто сформировать массив, который я уже буду выводить в селекте

Последний раз редактировалось Евгений7, 10.06.2012 в 18:25.
Ответить с цитированием
  #4 (permalink)  
Старый 10.06.2012, 18:25
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Евгений7
Т.е. Ваш пример мне абсолютно не понятен, как применить его к моему коду?
просто добавьте у себя вот это:
selects.sort(function( a, b ){
    return a.value > b.value ? 1 : ( a.value < b.value ? -1 : 0 );
});
перед
for(var idx in selects){
и все будет норм и если нужно отсортировать по другому полю, просто замените внутри функции свойства value на те что вам нужны
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 10.06.2012, 18:29
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

хотя я так понял вам совсем иное надо. В идеале было бы хорошо если бы привели хотя бы какой-то рабочий пример, тогда можно было бы к нему применить то чего вам нужно. Но по вашему сообщению сложно понять что сортировать
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 10.06.2012, 18:33
Новичок на форуме
Отправить личное сообщение для Евгений7 Посмотреть профиль Найти все сообщения от Евгений7
 
Регистрация: 10.06.2012
Сообщений: 9

Понимаю что без примера тяжело, но я не знаю какой пример нужен, все данные у меня выводятся только не в том порядке. Попробую Ваш код, о результатах сообщу. Заранее благодарен
Ответить с цитированием
  #7 (permalink)  
Старый 10.06.2012, 18:34
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Евгений7,
ну приведите пример JSON данных, и скажите по каким данным нужна сортировка.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 10.06.2012, 18:40
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Евгений7,
Хм - есть же возможность ссылки на json файл,
а) Задача становицо интересной,
b) Решение максимально приближено к объективной реальности!
Ответить с цитированием
  #9 (permalink)  
Старый 10.06.2012, 18:40
Новичок на форуме
Отправить личное сообщение для Евгений7 Посмотреть профиль Найти все сообщения от Евгений7
 
Регистрация: 10.06.2012
Сообщений: 9

Не получается у меня ничего, не работает. Пример чего именно нужен? Не понимаю ничего. Какая ссылка на JSON файл?? Никакого JSON файла нету, данные берутся из БД и через json() возвращаются в JS. Да и пример json данных не могу сделать, просматриваю их через файербаг, какие то данные есть, но как их скопировать и какие именно данные, их там уйма я не понимаю. Должен был сразу сказать что полный валенок. Сейчас код выглядит так:
var selects = option.option;
selects.sort(function( a, b ){
    return a.value_option > b.value_option ? 1 : ( a.value_option < b.value_option ? -1 : 0 );
});
            for(var idx in selects){
            var opts = new Array();
            for(i in selects[idx].opts){
                opts[i]=selects[idx].opts[i];
                //console.log(opts[i]); //ВЕРНО
            }

получается что ф-я не возвращает никаких selects, (для for), она возвращает вообще не понятно что судя из кода "return a.value_option > b.value_option ? 1 : ( a.value_option < b.value_option ? -1 : 0 );". Что с этим кодом что без него никаких изменений нет, данные также выводятся в порядке id

Последний раз редактировалось Евгений7, 10.06.2012 в 18:47.
Ответить с цитированием
  #10 (permalink)  
Старый 10.06.2012, 18:45
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Евгений7,
чтобы забрать json - нун передать ссылку

Воть ссылка и параметры при вбивке в адресное брауза - должно увидецо файл на странице
Ответить с цитированием
Ответ



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

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


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