Показать сообщение отдельно
  #1 (permalink)  
Старый 15.03.2018, 01:02
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 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.
Ответить с цитированием