Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Формируем ленту из разных событий (https://javascript.ru/forum/misc/70018-formiruem-lentu-iz-raznykh-sobytijj.html)

tk.stas 04.08.2017 08:37

Формируем ленту из разных событий
 
Всем привет!

Помогите решить такую задачку...

Есть объекты и массивы.
Например:
{
    "events" : {
      "prop1" : {
        "simple1" : [ 
			{
			  "title" : "Заголовок1_1",
			  "date" : "Дата1_1",
			},
			{
			  "title" : "Заголовок1_2",
			  "date" : "Дата1_2",
			} 
		],
        "simple2" : [ {
          "title" : "Заголовок2",
          "date" : "Дата2",
        } ]
      },
      "prop2" : {
        "simp1" : [ {
          "title" : "Заголовок3",
          "type" : "Тип1",
          "date" : "Дата3",
        } ],
        "simp2" : [ {
          "title" : "Заголовок4",
          "type" : "Тип2",
          "date" : "Дата4",
        } ]
      }
    }
}


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

Должно получиться так:
1. Заголовок1_1 - Дата1_1
2. Заголовок1_2 - Дата1_2
3. Заголовок2 - Дата2
4. Заголовок3 - Тип1 - Дата3
4. Заголовок3 - Тип2 - Дата4

laimas 04.08.2017 08:41

"simp1" : [ и "simp2" : [ - это ошибка.

tk.stas 04.08.2017 08:44

Да, точно, забыл в массив объединить.

ksa 04.08.2017 08:52

Цитата:

Сообщение от tk.stas
Из одного массива создать ленту я понимаю, а вот как из в всех в одну и с сортировкой по дате.

Если можешь делать простой - значит нужно сложный свести к простому. ;)

Пройдись по данным объекта, запихни все, найденные элементы массивов в один. А как работать с одним массивом ты уже знаешь... :)

laimas 04.08.2017 08:57

tk.stas,
на форуме, рони набил себе мозоли о клаву, создавая ответы на "как отсортировать объект по ...", ищите, это уже есть готовое. Но если этот объект порождает ваш сервер, то сортировку уж лучше делать сразу на нем. А вывод всего в одну, это пройтись циклом и вывод.

tk.stas 04.08.2017 09:12

Цитата:

Сообщение от ksa (Сообщение 460600)
Если можешь делать простой - значит нужно сложный свести к простому. ;)

Пройдись по данным объекта, запихни все, найденные элементы массивов в один. А как работать с одним массивом ты уже знаешь... :)


Понял. Спасибо.

рони 04.08.2017 12:37

Цитата:

Сообщение от tk.stas
и с сортировкой по дате.

???


<!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.4/jquery.min.js"></script>

  <script>
$(function() {
var data ={
    "events" : {
      "prop1" : {
        "simple1" : [
      {
        "title" : "Заголовок1_1",
        "date" : "Дата1_1"
      },
      {
        "title" : "Заголовок1_2",
        "date" : "Дата1_2"
      }
    ],
        "simple2" : [ {
          "title" : "Заголовок2",
          "date" : "Дата2"
        } ]
      },
      "prop2" : {
        "simp1" : [ {
          "title" : "Заголовок3",
          "type" : "Тип1",
          "date" : "Дата3"
        } ],
        "simp2" : [ {
          "title" : "Заголовок4",
          "type" : "Тип2",
          "date" : "Дата4"
        } ]
      }
    }
}

function fn(a) {
    var c = [];
    Object.keys(a).forEach(function(d) {
        "title" == d ? c.push(a) : "object" == typeof a[d] && (c = c.concat(fn(a[d])))
    });
    return c
}
fn(data).
//.sort() неизвестно как сортировать 
forEach(function(a, c) {
    a = Object.keys(a).map(function(c) {
        return a[c]
    }).join("-");
    $("<li>", {
        text: a
    }).appendTo("ol")
});

});
  </script>
</head>

<body>
<ol>
</ol>

</body>
</html>

tk.stas 04.08.2017 13:17

Цитата:

Сообщение от рони (Сообщение 460621)
???


<!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.4/jquery.min.js"></script>

  <script>
$(function() {
var data ={
    "events" : {
      "prop1" : {
        "simple1" : [
      {
        "title" : "Заголовок1_1",
        "date" : "Дата1_1"
      },
      {
        "title" : "Заголовок1_2",
        "date" : "Дата1_2"
      }
    ],
        "simple2" : [ {
          "title" : "Заголовок2",
          "date" : "Дата2"
        } ]
      },
      "prop2" : {
        "simp1" : [ {
          "title" : "Заголовок3",
          "type" : "Тип1",
          "date" : "Дата3"
        } ],
        "simp2" : [ {
          "title" : "Заголовок4",
          "type" : "Тип2",
          "date" : "Дата4"
        } ]
      }
    }
}

function fn(a) {
    var c = [];
    Object.keys(a).forEach(function(d) {
        "title" == d ? c.push(a) : "object" == typeof a[d] && (c = c.concat(fn(a[d])))
    });
    return c
}
fn(data).
//.sort() неизвестно как сортировать 
forEach(function(a, c) {
    a = Object.keys(a).map(function(c) {
        return a[c]
    }).join("-");
    $("<li>", {
        text: a
    }).appendTo("ol")
});

});
  </script>
</head>

<body>
<ol>
</ol>

</body>
</html>

Спасибо!

А подскажи пожалуйста, как можно определить путь к значению в объекта. т.е путь к "Дата3" = data.prop2.simp1

рони 04.08.2017 13:25

tk.stas,
data.events.prop2.simp1[0].date

tk.stas 04.08.2017 13:33

Цитата:

Сообщение от рони (Сообщение 460626)
tk.stas,
data.events.prop2.simp1[0].date

Нет. Мне надо чтоб я ввел значение 'Дата3', а скрипт мне показал путь к этому значению data.events.prop2.simp1[0].date.


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