Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.08.2017, 08:37
Аспирант
Отправить личное сообщение для tk.stas Посмотреть профиль Найти все сообщения от tk.stas
 
Регистрация: 25.02.2015
Сообщений: 41

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

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

Есть объекты и массивы.
Например:
{
    "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
Ответить с цитированием
  #2 (permalink)  
Старый 04.08.2017, 08:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

"simp1" : [ и "simp2" : [ - это ошибка.
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2017, 08:44
Аспирант
Отправить личное сообщение для tk.stas Посмотреть профиль Найти все сообщения от tk.stas
 
Регистрация: 25.02.2015
Сообщений: 41

Да, точно, забыл в массив объединить.
Ответить с цитированием
  #4 (permalink)  
Старый 04.08.2017, 08:52
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

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

Пройдись по данным объекта, запихни все, найденные элементы массивов в один. А как работать с одним массивом ты уже знаешь...
Ответить с цитированием
  #5 (permalink)  
Старый 04.08.2017, 08:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

tk.stas,
на форуме, рони набил себе мозоли о клаву, создавая ответы на "как отсортировать объект по ...", ищите, это уже есть готовое. Но если этот объект порождает ваш сервер, то сортировку уж лучше делать сразу на нем. А вывод всего в одну, это пройтись циклом и вывод.
Ответить с цитированием
  #6 (permalink)  
Старый 04.08.2017, 09:12
Аспирант
Отправить личное сообщение для tk.stas Посмотреть профиль Найти все сообщения от tk.stas
 
Регистрация: 25.02.2015
Сообщений: 41

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

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

Понял. Спасибо.
Ответить с цитированием
  #7 (permalink)  
Старый 04.08.2017, 12:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,071

Сообщение от 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>
Ответить с цитированием
  #8 (permalink)  
Старый 04.08.2017, 13:17
Аспирант
Отправить личное сообщение для tk.stas Посмотреть профиль Найти все сообщения от tk.stas
 
Регистрация: 25.02.2015
Сообщений: 41

Сообщение от рони Посмотреть сообщение
???


<!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
Ответить с цитированием
  #9 (permalink)  
Старый 04.08.2017, 13:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,071

tk.stas,
data.events.prop2.simp1[0].date
Ответить с цитированием
  #10 (permalink)  
Старый 04.08.2017, 13:33
Аспирант
Отправить личное сообщение для tk.stas Посмотреть профиль Найти все сообщения от tk.stas
 
Регистрация: 25.02.2015
Сообщений: 41

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

Последний раз редактировалось tk.stas, 04.08.2017 в 13:50.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
druggble последовательность отработки событий в разных браузерах NapalmRain jQuery 2 28.07.2017 09:46
Прослушивание событий между компонентами разных view Sogl ExtJS 11 08.11.2016 21:02
Очерёдность событий в разных браузерах. geekay Javascript под браузер 3 26.08.2015 13:40
Авторесайз iFrame на разных доминах MIRU4b (X)HTML/CSS 3 13.08.2015 13:58
Скопировать обработчики событий с одного элемента на другой. Jurasmi Events/DOM/Window 3 10.11.2010 19:03