Javascript.RU

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

Сортировка с алфавитом
Ребят помогите, не могу разобраться
Есть категории товаров, которые необходимо отсортировать и вывести списки категорий с алфавитом.
Т.е. как то так
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;
}


Проблема в том что необходимо параграфы с русскими символами поместить в конец массива, чтобы названия на русском были в конце меню, так же как я привет в примере выше, сейчас все в перемешку получается.
Ответить с цитированием
  #2 (permalink)  
Старый 12.02.2015, 10:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

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>
Ответить с цитированием
  #3 (permalink)  
Старый 13.02.2015, 07:46
Новичок на форуме
Отправить личное сообщение для webphp Посмотреть профиль Найти все сообщения от webphp
 
Регистрация: 19.09.2014
Сообщений: 7

рони, спасибо, ток мне для серверного js надо =) Но ваш пример показал где у меня затык был!
Ответить с цитированием
  #4 (permalink)  
Старый 11.11.2016, 09:58
Новичок на форуме
Отправить личное сообщение для RacCoon72 Посмотреть профиль Найти все сообщения от RacCoon72
 
Регистрация: 11.11.2016
Сообщений: 1

Сообщение от рони Посмотреть сообщение
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>
А можно то же самое, только с URL для каждого города ( в массив заносится, же уже )
Ответить с цитированием
  #5 (permalink)  
Старый 11.11.2016, 11:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

RacCoon72,
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Говнокод)) Сортировка пузырьком. Lorines Ваши сайты и скрипты 3 03.10.2013 01:23
Сортировка в таблице hoax Events/DOM/Window 13 03.10.2012 10:11
Сортировка и фильтрация json jQuery amt779 jQuery 4 28.07.2011 12:53
Сортировка и фильтрация в селекторе amt779 jQuery 1 08.07.2011 03:09
Сортировка таблиц с tablesort lexniko jQuery 0 03.11.2009 13:02