Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Собрать сложный многомерный массив. (https://javascript.ru/forum/misc/62581-sobrat-slozhnyjj-mnogomernyjj-massiv.html)

re.void 17.04.2016 20:29

Собрать сложный многомерный массив.
 
Дано:
[
			  {
				"EventStartDate": "17/10/2008",
				"EventType": "Restricted",
				"Event": "My Forum",
				"SessionStartTime": "18:00",
				"City": "Ryazan",
				"Type": "1on1",
				"RowCount": 0
			  },
			  {
				"EventStartDate": "17/10/2008",
				"EventType": "Restricted",
				"Event": "My Forum",
				"SessionStartTime": "15:10",
				"City": "London",
				"Type": "3on1",
				"RowCount": 1
			  },
			  {
				"EventStartDate": "24/11/2008",
				"EventType": "Conference",
				"Event": "AAA Test Event",
				"SessionStartTime": "15:10",
				"City": "Paris",
				"Type": "Meeting",
				"RowCount": 2
			  },
			  {
				"EventStartDate": "24/11/2008",
				"EventType": "Conference",
				"Event": "AAA Test Event",
				"SessionStartTime": "16:10",
				"City": "Moscow",
				"Type": "Breakfast",
				"RowCount": 3
			  }
			]

Необходимо сгруппировать по датам, названиям, типам ивентов и их сессий.

и тд. Скрипт цикла перебора массива:
var arr2 = [];
      for (var i = 0; i < arr1.length; i++) {
        if (arr2[arr1[i].EventStartDate] && arr2[arr1[i].EventStartDate].EventStartDate) {
            for (n in arr1[i]) {
                if (n != 'EventStartDate') {
                    arr2[arr1[i].EventStartDate][n] = (arr2[arr1[i].EventStartDate][n]) ? arr2[arr1[i].EventStartDate][n] + ";" + arr1[i][n] : arr1[i][n];
                }
            }
        } else {
            arr2[arr1[i].EventStartDate] = arr1[i];
        }

    }
    console.log('result', arr2);



Прошу помочь разобраться как переработать такой массив.
UPD: необходимый результат HTML

<div class="cib-day-elem">
    <div class="cib-label-am">
        <div type="text" class="event" name="dc_input0" id="dc_input0"><a class="cib-date">"EventStartDate(17/10/2008)"</a><br>
            <div class="cib-event"><a class="typeevent">"EventType"</a><a class="nevent">▶"Event"</a><br>
                <div class="cib-s1"><a class="tm">"SessionStartTime"</a><a>"City"</a><a class="type">"Type"</a></div>
                <div class="cib-s2"><a class="tm">"SessionStartTime"</a><a>"City"</a><a class="type">"Type"</a></div>
                <div class="cib-s3"><a class="tm">"SessionStartTime"</a><a>"City"</a><a class="type">"Type"</a></div>
             </div>
            </div>
        </div>
    </div>
    <div class="cib-label-am">
        <div type="text" class="event" name="dc_input2" id="dc_input2"><a class="cib-date">"EventStartDate(24/11/2008)"</a><br>
            <div class="cib-event"><a class="typeevent">"EventType"</a><a class="nevent">▶"Event"</a><br>
                  <div class="cib-s1"><a class="tm">"SessionStartTime"</a><a>"City"</a><a class="type">"Type"</a></div>
                  <div class="cib-s2"><a class="tm">"SessionStartTime"</a><a>"City"</a><a class="type">"Type"</a> </div>
                </div>
            </div>
        </div>
    </div>

рони 17.04.2016 20:36

re.void,
а можно как-то в рамках html, js изобразить исходные данные и необходимый результат.

re.void 17.04.2016 21:59

добавил разметку. а с исходными данными сложнее. У меня данные из таблички.


которые я построчно собираю циклом, пока строчки не кончатся, у меня их тридцать в данном случае.

var count = recordSet.length;
var DateArr = new Array();
var DateEventArr = new Array();


for (var i = 0; i < recordSet.length; i++) {
    var scObj = {
        EventStartDate: recordSet[i]["Event Start Date"],
        EventType: recordSet[i]["Event Type"],
        Event: recordSet[i]["Event"],
        SessionStartTime: recordSet[i]["SBLN Start Time"],
        City: recordSet[i]["SBLN City Name"],
        Type: recordSet[i]["Format"],

        RowCount: i

    };

рони 17.04.2016 22:16

re.void,
ок, но увы не осилил ... слишком много информации, но не той что необходима.

re.void 17.04.2016 23:35

рони,
Постарался переработать вопрос. Я еще очень тугой в этом деле, но хочу прийти к успеху! Не суди строго)

рони 18.04.2016 00:12

re.void,
так ?
{
    "17/10/2008": {
        "Restricted": {
            "My Forum": {
                "18:00": {
                    "City": "Ryazan",
                    "Type": "1on1",
                    "RowCount": 0
                },
                "15:10": {
                    "City": "London",
                    "Type": "3on1",
                    "RowCount": 1
                }
            }
        }
    },
    "24/11/2008": {
        "Conference": {
            "AAA Test Event": {
                "15:10": {
                    "City": "Paris",
                    "Type": "Meeting",
                    "RowCount": 2
                },
                "16:10": {
                    "City": "Moscow",
                    "Type": "Breakfast",
                    "RowCount": 3
                }
            }
        }
    }
}

re.void 18.04.2016 00:40

рони,
Да, именно так!

рони 18.04.2016 00:45

re.void, вариант для медитации ... далее сами
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">

 </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

</script>
  <script>
 $(function(){

var data = [
        {
        "EventStartDate": "17/10/2008",
        "EventType": "Restricted",
        "Event": "My Forum",
        "SessionStartTime": "18:00",
        "City": "Ryazan",
        "Type": "1on1",
        "RowCount": 0
        },
        {
        "EventStartDate": "17/10/2008",
        "EventType": "Restricted",
        "Event": "My Forum",
        "SessionStartTime": "15:10",
        "City": "London",
        "Type": "3on1",
        "RowCount": 1
        },
        {
        "EventStartDate": "24/11/2008",
        "EventType": "Conference",
        "Event": "AAA Test Event",
        "SessionStartTime": "15:10",
        "City": "Paris",
        "Type": "Meeting",
        "RowCount": 2
        },
        {
        "EventStartDate": "24/11/2008",
        "EventType": "Conference",
        "Event": "AAA Test Event",
        "SessionStartTime": "16:10",
        "City": "Moscow",
        "Type": "Breakfast",
        "RowCount": 3
        }
      ]
var obj = {el: $(".cib-day-elem")};
data.forEach(function(c) {
    var a = obj;
    Object.keys(c).forEach(function(d, e) {
        var b = c[d];
        var li = $("<li/>", {text : b});
        var ul = $("<ul/>");
        4 > e ? (!a[b] && (li.appendTo(a.el), ul.appendTo(li), a[b] = {el : ul}), a = a[b]) : li.appendTo(a.el)
    })
});
   })
  </script>
</head>

<body>
<ul class="cib-day-elem"></ul>

</body>
</html>

re.void 18.04.2016 21:12

рони,
Спасибо! Решение проще чем мне виделось! Теперь осталось понять как объекты перенести на html разметку.)


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