 
			
				22.04.2016, 17:58
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.04.2016 
					
					
					
						Сообщений: 10
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Объединение разных объектов JSON
			 
			
		
		
		
		Всем привет! Сразу принесу извинения за "многобукаф".   
Есть JSON, который выглядит следующим образом:
 
response: {
    items: [
    {from_id: 111111,
    message: 'Hello world'},
    {from_id: 111111,
    message: 'Hello world'},
    {from_id: 111112,
    message: 'Lorem ipsum'},
    ],
    profiles:[
    {id: 111111,
    first_name: 'Иван'},
    {id: 111112,
    first_name: 'Степан'}
    ]
}
Моя задача заключается в том, чтобы объединить данные из разных объектов, а именно: 
first_name из profiles объединить с message из items. И объединить их таким образом, чтобы они действительно соответствовали друг другу. 
Как я пробовал это сделать: 
Не буду расписывать весь код, дабы не перегружать и без того объемный текст, перейду к сути:
 
var items_message = data.response.items.length; 
var profiles_count = data.response.profiles.length;
for (var i=0; i<profiles_count; i++) {
  for (var j=0; j<items_message; j++)
{
if(data.respone.profiles[i].id !== data.response.items[j].from_id)continue;
var profilesStr += data.response.profiles[i].first_name + ' ' + 'Написал:' + ' ' + data.response.items[j].text;
document.getElementById('example').innerHTML = profilesStr;
 }; 
};
Такая конфигурация работает, но криво, т.е. и имена и посты вставляются в html, но не соответствуя друг другу. Плюс, если пользователь оставил несколько постов, то все они также вставляются в html. 
Как решить данную задачу? 
В итоге должно получаться, например: 
'Иван написал: Hello world'  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось max_fruit, 23.04.2016 в 17:36.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.04.2016, 13:29
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от max_fruit
			
		
	 | 
 
	| 
		Как решить данную задачу?
	 | 
 
	
 
 Сперва соответственно данные из базы получить, где они связаны, а не разбиты по частям.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.04.2016, 14:48
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.04.2016 
					
					
					
						Сообщений: 10
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 А это возможно осуществить при работе с VK open API? Данный json я получаю в качестве ответа от VK (да, он выглядит несколько иначе, но суть та же), и, как я понял, это единственный способ взаимодействия с сервером (ну еще можно ту же информацию получить в формате xml). 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.04.2016, 16:50
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от max_fruit
			
		
	 | 
 
	| 
		А это возможно осуществить при работе с VK open API?
	 | 
 
	
 
 Нет конечно, это же не ваш сервер. Странная логика однако в такой структуре, хотя если предполагается работа только с какими либо из них, возможно и удобно такое.
 
Ну тогда обходить profiles и получать их сообщения. Но что есть from_id - это идентификатор сообщения? Если так, то где автор 111112?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.04.2016, 17:44
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.04.2016 
					
					
					
						Сообщений: 10
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от laimas
			 
		
	 | 
 
	| 
		Но что есть from_id - это идентификатор сообщения? Если так, то где автор 111112?
	 | 
 
	
 
 Да это идентификатор, указывающий на id пользователя, который оставил это сообщение. А на счет автора 111112 - пардон, это я опечатался.    111112 - это Степан (уже поправил).
 
Прошу прощения за глупый вопрос, но что значит "обходить"?    В объекте profiles указаны только данные пользователя (напр., имя, фамилия, id, город и т.д.), в объекте items - грубо говоря, информация о его постах, в том числе и текст этих постов. Причем даже если человек оставляет несколько одинаковых постов, то в items их будет столько, сколько он их оставил, хотя в profiles его данные будут указаны единожды. Обходить, т.е. делать что-то подобное, что я пытался делать до этого (именно пытался   )? Т.е. сравнивать from_id и id и на основании этого извлекать текст сообщений?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.04.2016, 19:28
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		max_fruit,
  
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  </script>
</head>
<body>
 <script>
    var data = {
        response: {
            items: [{
                from_id: 111111,
                message: 'Hello world'
            }, {
                from_id: 111111,
                message: 'Hello world'
            }, {
                from_id: 111112,
                message: 'Lorem ipsum'
            }, ],
            profiles: [{
                id: 111111,
                first_name: 'Иван'
            }, {
                id: 111112,
                first_name: 'Степан'
            }]
        }
    }
    var first_name = data.response.profiles.reduce(function(obj, el) {
            obj[el.id] = el['first_name'];
            return obj
        }, {}),
        mes = data.response.items.map(function(el) {
            var id = el['from_id'];
            return first_name[id] + ' написал: ' + el.message
        })
    document.write(mes.join('<br>'))
 </script>
</body>
</html>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.04.2016, 21:11
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.04.2016 
					
					
					
						Сообщений: 10
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Огромное спасибо! 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.04.2016, 18:50
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.04.2016 
					
					
					
						Сообщений: 10
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		рони, ответьте, пожалуйста еще на два вопроса:
 1) Если объект profiles имеет вид:
 
profiles: [{
first_name: {
eng:'Ivan',
rus:'Иван'
}
}]
 , то почему не получается обратиться к нему вот таким способом: el['first_name']['rus'] (или el.first_name.rus) ?
 2) Как при использовании метода reduce правильно использовать оператор if? 
Попробовал следующим образом:
 
var first_name = data.response.profiles.reduce(function(obj, el) {
 if(el['first_name'] !== 'Степан') {
            obj[el.id] = el['first_name'];
            return obj
          } // так не работает
        }, {}),
        mes = data.response.items.map(function(el) {
            var id = el['from_id'];
            return first_name[id] + ' написал: ' + el.message
        })
    document.write(mes.join('<br>'))
Как, например, вывести сообщения только от Ивана, но не выводить сообщения от Степана?  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось max_fruit, 24.04.2016 в 18:53.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.04.2016, 19:17
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		max_fruit,
  
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  </script>
</head>
<body>
 <script>
    var data = {
        response: {
            items: [{
                from_id: 111111,
                message: 'Hello world'
            }, {
                from_id: 111111,
                message: 'Hello world'
            }, {
                from_id: 111112,
                message: 'Lorem ipsum'
            }, ],
            profiles: [{
                id: 111111,
                first_name: {
                    eng: 'Ivan',
                    rus: 'Иван'
                }
            }, {
                id: 111112,
                first_name: {
                    eng: 'Stepan',
                    rus: 'Степан'
                }
            }]
        }
    }
    var first_name = data.response.profiles.reduce(function(obj, el) {
            obj[el.id] = el['first_name']['rus'];
            return obj
        }, {}),
        mes = data.response.items.filter(function(el) {
            var id = el['from_id'];
            return first_name[id] != 'Степан'
        }).map(function(el) {
            var id = el['from_id'];
            return first_name[id] + ' написал: ' + el.message
        })
    document.write(mes.join('<br>'))
 </script>
</body>
</html>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.04.2016, 19:29
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.03.2012 
					
					
					
						Сообщений: 3,744
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от max_fruit
			 
		
	 | 
 
	
		Всем привет! Сразу принесу извинения за "многобукаф".   
Есть JSON, который выглядит следующим образом: 
response: {
    items: [
    {from_id: 111111,
    message: 'Hello world'},
    {from_id: 111111,
    message: 'Hello world'},
    {from_id: 111112,
    message: 'Lorem ipsum'},
    ],
    profiles:[
    {id: 111111,
    first_name: 'Иван'},
    {id: 111112,
    first_name: 'Степан'}
    ]
}
	 | 
 
	
 
 из формальных соображений нужно сделать поправку, что это не json  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |