Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.04.2016, 20:29
Аватар для re.void
Новичок на форуме
Отправить личное сообщение для re.void Посмотреть профиль Найти все сообщения от re.void
 
Регистрация: 30.03.2016
Сообщений: 7

Собрать сложный многомерный массив.
Дано:
[
			  {
				"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>

Последний раз редактировалось re.void, 17.04.2016 в 23:32.
Ответить с цитированием
  #2 (permalink)  
Старый 17.04.2016, 20:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

re.void,
а можно как-то в рамках html, js изобразить исходные данные и необходимый результат.
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2016, 21:59
Аватар для re.void
Новичок на форуме
Отправить личное сообщение для re.void Посмотреть профиль Найти все сообщения от re.void
 
Регистрация: 30.03.2016
Сообщений: 7

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


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

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

    };
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2016, 22:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

re.void,
ок, но увы не осилил ... слишком много информации, но не той что необходима.
Ответить с цитированием
  #5 (permalink)  
Старый 17.04.2016, 23:35
Аватар для re.void
Новичок на форуме
Отправить личное сообщение для re.void Посмотреть профиль Найти все сообщения от re.void
 
Регистрация: 30.03.2016
Сообщений: 7

рони,
Постарался переработать вопрос. Я еще очень тугой в этом деле, но хочу прийти к успеху! Не суди строго)
Ответить с цитированием
  #6 (permalink)  
Старый 18.04.2016, 00:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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
                }
            }
        }
    }
}
Ответить с цитированием
  #7 (permalink)  
Старый 18.04.2016, 00:40
Аватар для re.void
Новичок на форуме
Отправить личное сообщение для re.void Посмотреть профиль Найти все сообщения от re.void
 
Регистрация: 30.03.2016
Сообщений: 7

рони,
Да, именно так!
Ответить с цитированием
  #8 (permalink)  
Старый 18.04.2016, 00:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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>
Ответить с цитированием
  #9 (permalink)  
Старый 18.04.2016, 21:12
Аватар для re.void
Новичок на форуме
Отправить личное сообщение для re.void Посмотреть профиль Найти все сообщения от re.void
 
Регистрация: 30.03.2016
Сообщений: 7

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление данных в многомерный массив rneft Элементы интерфейса 11 28.03.2016 17:56
Как собрать все данные из таблицы, и отправить массив на сервер optsar AJAX и COMET 14 11.12.2015 07:58
Собрать массив из элементов DOM Fairy-Wilbury Events/DOM/Window 4 13.09.2013 17:30
ajax и многомерный массив cat9 AJAX и COMET 1 03.10.2010 15:25
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14