Как мне поместить все эти значения массива в один массив?

#angular

#angular

Вопрос:

Мне нужно передать значения в диаграммах детализации, мой формат JSON работает неправильно, поэтому, пожалуйста, помогите мне с этим.

 this.MemberProvider.totalMonthlyRevenueByBranch(getmonthmonthwisr)
.subscribe(data => {

 this.graphdata =data;
 console.log(this.graphdata);

})
  

Мой формат JSON выглядит следующим образом,

 [
   {
      "_id":{
         "year":2018
      },
      "data":[
         {
            "year":2018,
            "total":10260,
            "month":"Mar"
         }
      ],
      "overall":10260
   },
   {
      "_id":{
         "year":2019
      },
      "data":[
         {
            "year":2019,
            "total":14160,
            "month":"Dec"
         },
         {
            "year":2019,
            "total":14160,
            "month":"Nov"
         },
         {
            "year":2019,
            "total":14259,
            "month":"Oct"
         },
         {
            "year":2019,
            "total":14160,
            "month":"Sep"
         },
         {
            "year":2019,
            "total":14259,
            "month":"Aug"
         },
         {
            "year":2019,
            "total":14160,
            "month":"July"
         },
         {
            "year":2019,
            "total":28518,
            "month":"Jun"
         },
         {
            "year":2019,
            "total":14259,
            "month":"May"
         },
         {
            "year":2019,
            "total":185185,
            "month":"Apr"
         },
         {
            "year":2019,
            "total":54739,
            "month":"Mar"
         },
         {
            "year":2019,
            "total":28518,
            "month":"Feb"
         },
         {
            "year":2019,
            "total":28518,
            "month":"Jan"
         }
      ],
      "overall":424895
   }
]
  

Как получить такую структуру JSON

 [
      {
       "year": "2018",
       "Mar": 10260,
       "overall": 10260
      },
      {
        "year": "2019",
        "Jan": 28518,
        "Feb": 28518,
        "Mar": 54739,
        "Apr": 185185,
        "May": 14259,
        "Jun": 28518,
        "July": 14160,
        "Aug": 14259,
        "Sep": 14160,
        "Oct": 14259
        "Nov": 14160
        "Dec": 14160
        "overall": 424895
      }
    ];
  

Комментарии:

1. что вы пробовали до сих пор? не могли бы вы предоставить нам свои текущие попытки

2. Подсказка: Lodash groupby , map

3. Я новичок в angular bro, просто я попал в api, и я получаю aboveresponse, и мне нужно структурировать его в соответствии со структурой JSON, которую я предоставил. заранее спасибо.

Ответ №1:

Это то, что я придумал очень быстро. Оптимизация этого кода зависит от вас. Вероятно, вы могли бы использовать a for-loop вместо map . Полностью зависит от вас

 var data = [
   {
      "_id":{
         "year":2018
      },
      "data":[
         {
            "year":2018,
            "total":10260,
            "month":"Mar"
         }
      ],
      "overall":10260
   },
   {
      "_id":{
         "year":2019
      },
      "data":[
         {
            "year":2019,
            "total":14160,
            "month":"Dec"
         },
         {
            "year":2019,
            "total":14160,
            "month":"Nov"
         },
         {
            "year":2019,
            "total":14259,
            "month":"Oct"
         },
         {
            "year":2019,
            "total":14160,
            "month":"Sep"
         },
         {
            "year":2019,
            "total":14259,
            "month":"Aug"
         },
         {
            "year":2019,
            "total":14160,
            "month":"July"
         },
         {
            "year":2019,
            "total":28518,
            "month":"Jun"
         },
         {
            "year":2019,
            "total":14259,
            "month":"May"
         },
         {
            "year":2019,
            "total":185185,
            "month":"Apr"
         },
         {
            "year":2019,
            "total":54739,
            "month":"Mar"
         },
         {
            "year":2019,
            "total":28518,
            "month":"Feb"
         },
         {
            "year":2019,
            "total":28518,
            "month":"Jan"
         }
      ],
      "overall":424895
   }
];
var res = [];
data.map((item, index) =>  {
  const overall = item.overall;
  item.data.map(i => {
  	res[index] = Object.assign(res[index] || {}, {[i.month]: i.total});
  });
  res[index] = Object.assign(res[index], {
  overall, year: item._id.year
  });
  return res;
});

document.body.innerHTML = '<pre>'   JSON.stringify(res, null, '  ')   '</pre>';  

Комментарии:

1. Примечание: НЕ копируйте код напрямую. Поймите это, а затем напишите сами.

2. Конечно, брат, я сделаю это позже.