Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   перевод списка в многомерный массив (https://javascript.ru/forum/events/34416-perevod-spiska-v-mnogomernyjj-massiv.html)

Telnet 04.01.2013 15:21

перевод списка в многомерный массив
 
Есть такой вот массив на PHP
Array
(
    [Pervaya] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 34
                    [name] =>qqq
                )

            [1] => stdClass Object
                (
                    [id] => 45
                    [name] => www
                )
        )

    [Vtoraya] => Array
        (


            [0] => stdClass Object
                (
                    [id] => 56
                    [name] => eee
                )

            [1] => stdClass Object
                (
                    [id] => 78
                    [name] => rr
                )
)

я его успешно получаю и генерирую такие вот списки
<ul id="Pervaya" >
<li user-id="34"><input type="checkbox"> qqqq</li>
<li user-id="45"><input type="checkbox"> wwww</li>
</ul>
<ul id="Vtoraya" >
<li user-id="56"><input type="checkbox"> eee</li>
<li user-id="78"><input type="checkbox"> rr</li>
</ul>

с этим проблем нет тут все получается в процессе работы пользователь может изменить эти списки, скажем добавить какие то элементы или изменить их местами вообщем эти списки меняются, потом после изменения пользователь должен мочь сохранить эти уже измененные списки вот тут и не получается у меня ни как сделать многомерные ассоциативные массивы в яваскрипте
Написал следующие но groups[groupName] пишется не массив а пустой элемент
var groups = new Array();
		$("ul").each(function(index, element){
			var groupName = $(element).attr("id");
			groups[groupName] = new Array();
			rules = new Object();
			$(element).children().each(function(i, li){
				var arrLi = new Array();
				arrLi["id"] = $(this).attr("user-id");
				arrLi["name"] = $(this).text();				
				groups[groupName].push(arrLi);	
			});	
					
		});

А да забыл указать что использую jQuery

рони 04.01.2013 15:42

Telnet,
для начала $("#ul") нет у вас такого id, есть элемент $("ul")

Telnet 04.01.2013 15:44

рони я там просто сокрашал , что б проше было разобраться у меня там итерации как по спискам так и по элементам Li работали

рони 04.01.2013 15:53

Telnet,
ваш код практически рабочий с учётом моего замечания - только массивы нигде не используются, замените их на {}
Возможный вариант ...
var groups = {};
		$("ul").each(function(index, element){
			var groupName = $(element).attr("id");
            groups[groupName] = [];
			rules = new Object();
			$(element).children().each(function(i, li){
				var arrLi = {};
				arrLi["id"] = $(this).attr("user-id");
				arrLi["name"] = $(this).text();
				groups[groupName].push(arrLi);
			});

		});

Telnet 04.01.2013 16:04

var groups = {};
		$("#groupRight ul").each(function(index, element){
			var groupName = $(element).attr("id");
			groups[groupName] = {};
			$(element).children().each(function(i, li){
				var arrLi = {};
				arrLi.id = $(this).attr("user-id");
				arrLi.name = $(this).text();					
				groups[groupName] = (arrLi);	
			});	
					
		});

Вот что то типа того только groups[groupName] теперь содержит только последний элемент, а мне нужно что б это был массив всех элементов

Telnet 04.01.2013 16:06

var groups = {};
		$("#groupRight ul").each(function(index, element){
			var groupName = $(element).attr("id");
			groups[groupName] = [];
			$(element).children().each(function(i, li){
				var arrLi = {};
				arrLi.id = $(this).attr("user-id");
				arrLi.name = $(this).text();	
				
				groups[groupName].push(arrLi);	
			});	
				
		});

Вот то что нужно


Часовой пояс GMT +3, время: 04:33.