10.06.2012, 18:05
|
Новичок на форуме
|
|
Регистрация: 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 а по значениям?
Есть советы?
|
|
10.06.2012, 18:13
|
что-то знаю
|
|
Регистрация: 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 );
}
|
|
10.06.2012, 18:22
|
Новичок на форуме
|
|
Регистрация: 10.06.2012
Сообщений: 9
|
|
Совсем забыл сказать, что JS я не понимаю вообще, методом тыка учусь, сколько не пытался понять не смог. Поэтому даже не могу понять откуда взялись ф-ии a и b и где они написаны.. Т.е. Ваш пример мне абсолютно не понятен, как применить его к моему коду? И alert мне как бы не нужен, мне надо просто сформировать массив, который я уже буду выводить в селекте
Последний раз редактировалось Евгений7, 10.06.2012 в 18:25.
|
|
10.06.2012, 18:25
|
что-то знаю
|
|
Регистрация: 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 на те что вам нужны
|
|
10.06.2012, 18:29
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
хотя я так понял вам совсем иное надо. В идеале было бы хорошо если бы привели хотя бы какой-то рабочий пример, тогда можно было бы к нему применить то чего вам нужно. Но по вашему сообщению сложно понять что сортировать
|
|
10.06.2012, 18:33
|
Новичок на форуме
|
|
Регистрация: 10.06.2012
Сообщений: 9
|
|
Понимаю что без примера тяжело, но я не знаю какой пример нужен, все данные у меня выводятся только не в том порядке. Попробую Ваш код, о результатах сообщу. Заранее благодарен
|
|
10.06.2012, 18:34
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Евгений7,
ну приведите пример JSON данных, и скажите по каким данным нужна сортировка.
|
|
10.06.2012, 18:40
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Евгений7,
Хм - есть же возможность ссылки на json файл,
а) Задача становицо интересной,
b) Решение максимально приближено к объективной реальности!
|
|
10.06.2012, 18:40
|
Новичок на форуме
|
|
Регистрация: 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.06.2012, 18:45
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Евгений7,
чтобы забрать json - нун передать ссылку
Воть ссылка и параметры при вбивке в адресное брауза - должно увидецо файл на странице
|
|
|
|