 
			
				15.03.2018, 01:02
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 16.06.2013 
					
					
					
						Сообщений: 172
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Обработка данных с сервера
			 
			
		
		
		
		Всем привет. Помогите плиз, туплю на ночь глядя. 
Собственно вопрос в следующем. 
Получаю данные с сервака в json, ну а потом же преобразую в объект
 
var data = {
            category: [ // Массив категорий
             {id: "1", name: "Авто", color: "#50bbde"},
             {id: "2", name: "Продукты", color: "#50bbde"}
            ],
            result: [ 
                // Массив записей, где name, color это категории из category выше, 
                // а также есть idCategory - это id категорий
                {id: '1', idCategory: '1', nameItem: 'Бензин', price: '300', name: "Авто", color: "#50bbde"},
                {id: '2', idCategory: '1', nameItem: 'Мойка', price: '100', name: "Авто", color: "#50bbde"},
                {id: '3', idCategory: '2', nameItem: 'Хлеб', price: '10', name: "Продукты", color: "#50bbde"},
                {id: '4', idCategory: '2', nameItem: 'Молоко', price: '15', name: "Продукты", color: "#50bbde"}
            ]
        }
Данные нужно преобразовать в такой формат
 
[
              var data = {
                  name: 'Авто', // Название категории
                  color: '#333333', // Цвет категории
                  res: [
                    {id: '1', idCategory: '1', nameItem: 'Бензин', price: '300', name: "Авто", color: "#50bbde"}
                  ],
                  price: ''300" // Сумма price всех записей одной категории
              }
          ]
Собственно я это и сделал вот такой функцией
 
function foo (res) {
            let arr = [];
            res.category.forEach(elem => {
              let item = [];
              let price = 0;
              res.result.forEach(el => {
                if (el.idCategory === elem.id) {
                  item.push(el);
                  price += Number(el.price);
                }
              });
              arr.push({name: elem.name, color: elem.color, res: item, price});
            });
            return arr;
          }
          console.log(foo(data));
Но у меня такое ощущение что это говно код. 
Можно ли без data.category, только по data.result сделать то же самое как я сделал функцией foo()? 
Буду признателен за участие.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Bond, 15.03.2018 в 01:29.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.03.2018, 01:11
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Bond
			
		
	 | 
 
	| 
		Данные нужно преобразовать в такой формат
	 | 
 
	
 
 не осилил
 
	
 
	| 
		
			Сообщение от Bond
			
		
	 | 
 
	| 
		Собственно я это и сделал вот такой функцией
	 | 
 
	
 
 код как код  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.03.2018, 01:24
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 16.06.2013 
					
					
					
						Сообщений: 172
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		рони,
  ну то есть категорию нужно записать в объект, и в тот же объект запихнуть все записи этой категории, а также сумму всех записей. 
Сократить хочется для того что бы на серваке не делать два запроса - к категориям а потом к записям 
А сделать один запрос с LEFT JOIN, отдать данные как в data.result и уже на клиенте мутить то что надо. 
Собственно сначала я так и сделал на серваке, но потом пришлось еще допилить запрос к категориям, и получилось то что получилось.
 это радует ))  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.03.2018, 01:28
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Bond, 
 можно нормальный вариант что на выходе? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.03.2018, 01:37
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 16.06.2013 
					
					
					
						Сообщений: 172
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		рони, 
 На выходе массив объектов,
 
[
// Категория Авто
              {
                  name: 'Авто', // Название категории из data.category[0].name
                  color: '#333333', // Цвет категории
                  res: [
                    {id: '1', idCategory: '1', nameItem: 'Бензин', price: '300', name: "Авто", color: "#50bbde"},
                    {id: '2', idCategory: '1', nameItem: 'Мойка', price: '100', name: "Авто", color: "#50bbde"},
                  ],
                  price: '400' // Сумма всех записей одной категории
              },
// Категория Продукты
              {
                  name: 'Продукты', // Название категории из data.category[1].name
                  color: '#333333', // Цвет категории
                  res: [
                    {id: '3', idCategory: '2', nameItem: 'Хлеб', price: '10', name: "Продукты", color: "#50bbde"},
                    {id: '4', idCategory: '2', nameItem: 'Молоко', price: '15', name: "Продукты", color: "#50bbde"},
                  ],
                  price: '25' // Сумма всех записей одной категории
              },
// Еще какая-то категория
           {.....}
          ]
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Bond, 15.03.2018 в 01:42.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.03.2018, 01:56
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Bond,
   
<script>
var data = {
            category: [ // Массив категорий
             {id: "1", name: "Авто", color: "#50bbde"},
             {id: "2", name: "Продукты", color: "#50bbde"}
            ],
            result: [
                // Массив записей, где name, color это категории из category выше,
                // а также есть idCategory - это id категорий
                {id: '1', idCategory: '1', nameItem: 'Бензин', price: '300', name: "Авто", color: "#50bbde"},
                {id: '2', idCategory: '1', nameItem: 'Мойка', price: '100', name: "Авто", color: "#50bbde"},
                {id: '3', idCategory: '2', nameItem: 'Хлеб', price: '10', name: "Продукты", color: "#50bbde"},
                {id: '4', idCategory: '2', nameItem: 'Молоко', price: '15', name: "Продукты", color: "#50bbde"}
            ]
        }
function fn(arr) {
  var obj = {}, data = [];
  arr.forEach(function(el) {
    var index = obj[el.name];
    if (index == void 0) {
      index = obj[el.name] = data.length;
      data.push({name:el.name, color:el.color, res:[], price:0});
    }
    var item = data[index];
    item.res.push(el);
    item.price += +el.price;
  });
  return data;
}
document.write(JSON.stringify(fn(data.result)))
</script>
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.03.2018, 02:19
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 16.06.2013 
					
					
					
						Сообщений: 172
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 рони, 
 Спасибо, это как раз то что я хотел, но не осилил ) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |