Сортировка массива
Приветик всем. Извиняюсь если пишу не в тот форум, у меня следующая проблема. Создаю запрос с помощью 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 а по значениям? Есть советы? |
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 ); } |
Совсем забыл сказать, что JS я не понимаю вообще, методом тыка учусь, сколько не пытался понять не смог. Поэтому даже не могу понять откуда взялись ф-ии a и b и где они написаны.. Т.е. Ваш пример мне абсолютно не понятен, как применить его к моему коду? И alert мне как бы не нужен, мне надо просто сформировать массив, который я уже буду выводить в селекте
|
Цитата:
selects.sort(function( a, b ){ return a.value > b.value ? 1 : ( a.value < b.value ? -1 : 0 ); });перед for(var idx in selects){и все будет норм и если нужно отсортировать по другому полю, просто замените внутри функции свойства value на те что вам нужны |
хотя я так понял вам совсем иное надо. В идеале было бы хорошо если бы привели хотя бы какой-то рабочий пример, тогда можно было бы к нему применить то чего вам нужно. Но по вашему сообщению сложно понять что сортировать
|
Понимаю что без примера тяжело, но я не знаю какой пример нужен, все данные у меня выводятся только не в том порядке. Попробую Ваш код, о результатах сообщу. Заранее благодарен
|
Евгений7,
ну приведите пример JSON данных, и скажите по каким данным нужна сортировка. |
Евгений7,
Хм - есть же возможность ссылки на json файл, а) Задача становицо интересной, b) Решение максимально приближено к объективной реальности! |
Не получается у меня ничего, не работает. Пример чего именно нужен? Не понимаю ничего. Какая ссылка на 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,
чтобы забрать json - нун передать ссылку Воть ссылка и параметры при вбивке в адресное брауза - должно увидецо файл на странице |
Часовой пояс GMT +3, время: 13:55. |