Сортировка массива
Приветик всем. Извиняюсь если пишу не в тот форум, у меня следующая проблема. Создаю запрос с помощью 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 - нун передать ссылку Воть ссылка и параметры при вбивке в адресное брауза - должно увидецо файл на странице |
Цитата:
|
Вот ссылка $.post("cat_ajax/sel_opt", {"id_cat": $(this).val()} вбиваю в адресную cat_ajax/sel_opt, открывается яндекс-поиск. Хрень какая то
|
Цитата:
|
Цитата:
$.ajax({ url: 'cat_ajax/sel_opt', data: {"id_cat": $(this).val()}, type: "post", dataType: "html", success: function( data ) { alert( data ); // вот это нам и нужно. } }); |
почему то не выводится ничего
|
Евгений7,
закоментируйте у себя вот эту строчку: $.post("cat_ajax/sel_opt", {"id_cat": $(this).val()} и вместо нее вставьте то что я вам написал. |
я так и сделал. Закомментировал свой код и написал Ваш
|
Цитата:
|
хм...а при чём тут запрос? Запрос выдаёт все нужные данные. В процессе создания массива на JS все данные идут в порядке увеличения по значениям, а когда массив уже полностью сформирован, то данные сортируются уже не по значению а по id. Я конечно проверю всё с самого начала, с запроса, с получения данных и пойду дальше. Хотелось бы ещё узнать каким образом вообще можно просмотреть содержимое массива в браузере (то что пришло в JS), типа как на php есть ф-я print_r, var_dump и т.д. Есть хоть что то похожее, чтобы без километрового кода просмотреть массив? Пишу html(var); он пишет html is not defined
|
Часовой пояс GMT +3, время: 05:57. |