Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.03.2016, 13:02
Новичок на форуме
Отправить личное сообщение для SergeySP Посмотреть профиль Найти все сообщения от SergeySP
 
Регистрация: 10.03.2016
Сообщений: 5

Разобрать jSON обьект
есть массив вида:
[
  {
    "Name": "Ivanov",
    "Department": "72000"
  },
  {
    "Name": "Petrov",
    "Department": "72000"
  },
  {
    "Name": "kuznetsov",
    "Department": "72100"
  },
  {
    "Name": "Putin",
    "Department": "72110"
  },
  {
    "Name": "Pushkin",
    "Department": "31000"
  },
  {
    "Name": "Ivanov2",
    "Department": "31300"
  },
  {
    "Name": "Sidorov",
    "Department": "72110"
  },
    {
    "Name": "Sidorov",
    "Department": "01000"
  },
    {
    "Name": "Sidorov",
    "Department": "01000"
  },
    {
    "Name": "Sidorov",
    "Department": "01100"
  },
  {
    "Name": "Kozlov",
    "Department": "72110"
  }
]





Для каждой группы сотрудников нужно создать родительскую запись. вида{"Name": "01000","Department": "01000",id=1,parrentid = null}, самими сотрудникам записать в поле parrentid связь по id созданной записи.
Далее, между созданными родительскими записями нужно тоже расставить связи по логике. если в значении заполнены первые два символа а остальные три нули "72000", то у него "parrentid = null", далее значение которые начинаются на 72 но в конце 2 нуля а 3 символ не ноль,например:72100 то он должен стать дочерним с parrentid равным родительскому "72000",72110 должен стать дочерним для 72100 и т.д.

Пока смог реализовать только первую часть, т.е. у меня создаются уникальные записи и сотрудники к ним привязываются. Требуется помощь в реализации второй части.
Код:
function getdata(datajson){
		datajson.sort(function(a,b){return +a.Department.substring(0,5) > +b.Department.substring(0,5) ? 1 : -1});

		var i,
			j = 0,
			parentId = null,
			otdel = null,
			patt = /[^[0-9]/,
			myobj = [],
			departID;

		for (i = 0; i < datajson.length; i++) {
			
			departID = datajson[i].Department;
							if (otdel !== departID ){

								otdel = departID;
									myobj.push({
										Name:departID,
										Department:datajson[i].Department,
										id:++j,
										parentId:null
									});
								parentId = j;
								datajson[i].id = ++j;
								datajson[i].parentId = parentId;
								myobj.push(datajson[i]);
								

							}else{
								datajson[i].id =j;
								datajson[i].parentId = parentId;
								myobj.push(datajson[i])


							}

							j++;

				}    
		  console.log(JSON.stringify(myobj));
		  return myobj;
		}

На выходе должно получиться примерно вот так:

[
    {
    "Name": "72000",
    "Department": "72000",
    "id":1,
    "parentid":null
  },
  {
    "Name": "Ivanov",
    "Department": "72000",
    "id":2,
    "parentid":1
  },
  {
    "Name": "Petrov",
    "Department": "72000",
    "id":3,
    "parentid":1
  },
    {
    "Name": "72100",
    "Department": "72100",
    "id":4,
    "parentid":1
  },
  {
    "Name": "kuznetsov",
    "Department": "72100",
    "id":5,
    "parentid":4
  },
  {
    "Name": "72110",
    "Department": "72110",
    "id":6,
    "parentid":4
  },
  {
    "Name": "Putin",
    "Department": "72110",
    "id":7,
    "parentid":6
  }]
Ответить с цитированием
  #2 (permalink)  
Старый 10.03.2016, 13:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Этот JSON с севера, а источник база?
Ответить с цитированием
  #3 (permalink)  
Старый 10.03.2016, 13:37
Новичок на форуме
Отправить личное сообщение для SergeySP Посмотреть профиль Найти все сообщения от SergeySP
 
Регистрация: 10.03.2016
Сообщений: 5

Да. Данные получаю с вебсервера, а там из базы берутся.
Ответить с цитированием
  #4 (permalink)  
Старый 10.03.2016, 16:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Так почему веб-сервер не возвращает истинные идентификаторы записей и идентификаторы родителей, которые единственно истинные, а не цифры выдуманные на клиенте?
Ответить с цитированием
  #5 (permalink)  
Старый 10.03.2016, 16:36
Новичок на форуме
Отправить личное сообщение для SergeySP Посмотреть профиль Найти все сообщения от SergeySP
 
Регистрация: 10.03.2016
Сообщений: 5

На сервере они хранятся тоже в плоском виде, и записи не связаны.
Ответить с цитированием
  #6 (permalink)  
Старый 10.03.2016, 16:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от SergeySP
На сервере они хранятся тоже в плоском виде, и записи не связаны.
И это по вашему база? Какой прок хранить в базе список, записи которых явно имеют родителей, не указывая их? Это уму не постижимо.
Приведите записи в базе к структуре надлежащей и не заставляйте клиента заниматься ерундой.
Ответить с цитированием
  #7 (permalink)  
Старый 10.03.2016, 17:21
Новичок на форуме
Отправить личное сообщение для SergeySP Посмотреть профиль Найти все сообщения от SergeySP
 
Регистрация: 10.03.2016
Сообщений: 5

Все намного сложнее, это данные из OLAP, которые туда попадают еще из не скольких систем, в частности из ERP Галактика а там они находятся в том виде в котором нужны самой ERP, поэтому приходится работать с тем что имеем.
Ответить с цитированием
  #8 (permalink)  
Старый 10.03.2016, 17:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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

Подобные данные обязательно должны храниться в базе как иерархическая структура - родитель -> потомки. Вот то что вы описываете по "Department", делайте при добавлении записей в базу. А запрос в базу на их выборку должен сначала сортироваться по родительскому идентификатору, а затем по идентификатору записей, вы и получите, то что нужно в итоге.

Придумывать на клиенте идентификаторы, это уже иметь ошибку на 99%.
Ответить с цитированием
  #9 (permalink)  
Старый 11.03.2016, 15:04
Новичок на форуме
Отправить личное сообщение для SergeySP Посмотреть профиль Найти все сообщения от SergeySP
 
Регистрация: 10.03.2016
Сообщений: 5

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

А что вам поможет?

Вы можете ответить на вопрос - зачем эти фиктивные ID на клиенте? Вы ведь их получаете исходя из значения Department, а значит это свойство уже должно быть уникальным. Если же держать данные в базе, то ID на клиенте, это профанация, думаю сами вполне можете догадаться почему.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разобрать json Dtri jQuery 24 05.01.2015 18:42
Не могу распарсить JSON. gorenie jQuery 3 29.11.2013 22:26
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10
Как добавить элемент в обьект json Юрий Игоревич Общие вопросы Javascript 2 26.10.2009 15:01