Сортировка с алфавитом
Ребят помогите, не могу разобраться
Есть категории товаров, которые необходимо отсортировать и вывести списки категорий с алфавитом. Т.е. как то так A App Add B Border Background А Арбуз Ананас Массив объектов выглядит так [ {"name": "Арбуз", "url": "url"}, {"name": "Ананас", "url": "url"}, {"name": "Background", "url": "url"}, {"name": "Border", "url": "url"}, {"name": "Add", "url": "url"}, {"name": "App", "url": "url"} ] Есть функция function catalogSort(catalog, options) { var html = '', letter, j, i, obj, field = {}, item = 0, maxHeight , tags = { dl: { open:false, i: '<dl class="marks-col">', o: '</dl>'}, dd: { open:false, i: '<dd class="marks-col-dd">', o: '</dd>'}, ul: { open:false, i: '<ul>', o: '</ul>'}, open:function(tag){ if( !this[tag].open) { this[tag].open = true; html += this[tag].i; } }, close:function(tag){ if( this[tag].open) { this[tag].open = false; html += this[tag].o; } } } , newLetter = function(letter) { tags.open('dl') html += '<dt class="marks-col-dt">' + letter + '</dt>'; tags.open('dd'); tags.open('ul'); }; maxHeight = Math.ceil(catalog.length/options.columns); // разобрать в структуру { буква:[слова,..],.. } for (i in catalog) { obj = catalog[i]; letter = obj.name.charAt(0); if (field.hasOwnProperty(letter)) { field[letter].push(obj); } else { field[letter] = [obj]; } } // формируем вывод в шаблон for(letter in field) { // сорт по алфавиту field[letter].sort( function(a,b){ return a.name.localeCompare(b.name)}); tags.close('ul'); tags.close('dd'); for( j in field[letter]) { if( item && item%maxHeight == 0) { // на след. столбец в той же букве tags.close('ul'); tags.close('dd'); tags.close('dl'); newLetter( letter); } else if( j==0) { // просто начало буквы newLetter( letter); } var url = '/catalog/' + field[letter][j].url + '/'; html += '<li class="marks-col-item"><a href="' + url + '" class="marks-col-link">' + field[letter][j].name + '</a></li>'; item++; } } html += '</ul></dd></dl>'; return html; } Проблема в том что необходимо параграфы с русскими символами поместить в конец массива, чтобы названия на русском были в конце меню, так же как я привет в примере выше, сейчас все в перемешку получается. |
webphp,
Вариант ... ссылки добавить не проблема <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script> $(function() { function sortFunction(a, b) { return a.name < b.name ? -1 : a.name > b.name ? 1 : 0 } var arr = [ {"name": "Арбуз", "url": "url"}, {"name": "Ананас", "url": "url"}, {"name": "Background", "url": "url"}, {"name": "Border", "url": "url"}, {"name": "Add", "url": "url"}, {"name": "App", "url": "url"} ] arr.sort(sortFunction); var ul = $("<ul/>"), li, sub, obj = {}, letter; $.each(arr, function(indx, el) { letter = el.name.charAt(0); if (!obj[letter]) { obj[letter] = true; li = $("<li/>", { "text": letter.toUpperCase() }); li.appendTo(ul); sub = $("<ul/>").appendTo(li) } $("<li/>", { "text": el.name }).appendTo(sub) }); ul.appendTo("body") }); </script> </head> <body> </body> </html> |
рони, спасибо, ток мне для серверного js надо =) Но ваш пример показал где у меня затык был!
|
Цитата:
|
RacCoon72,
:blink: |
Часовой пояс GMT +3, время: 23:28. |