我在下面的数组对象中有数据并想转换另一种数组对象格式

问题描述

我的 API 响应 -

let data = [
  {
    date: '2021-04-27',formatted_date: 'Apr 27',location: [
      {
        date: '2021-04-27',country: 'India',total_views: 6,formatted_views: '6',total_watch_duration: 115,formatted_watch_duration: '0h 1m',},{
        date: '2021-04-27',country: 'USA',total_views: 16,formatted_views: '16',total_watch_duration: 1195,country: 'Canada',formatted_views: '10',],{
    date: '2021-04-28',formatted_date: 'Apr 28',location: [
      {
        date: '2021-04-28',total_views: 1,formatted_views: '1',total_watch_duration: 21,formatted_watch_duration: '0h 0m',{
        date: '2021-04-28',country: 'UK',country: 'China',{
    date: '2021-04-29',formatted_date: 'Apr 29',location: [
      {
        date: '2021-04-29',total_views: 2,formatted_views: '2',total_watch_duration: 37,{
    date: '2021-04-30',formatted_date: 'Apr 30',location: [
      {
        date: '2021-04-30',total_watch_duration: 0,formatted_watch_duration: '0',{
        date: '2021-04-30',{
    date: '2021-05-01',formatted_date: 'May 01',location: [],{
    date: '2021-05-02',formatted_date: 'May 02',{
    date: '2021-05-03',formatted_date: 'May 03',{
    date: '2021-05-04',formatted_date: 'May 04',location: [
      {
        date: '2021-05-04',total_views: 4,formatted_views: '4',total_watch_duration: 584,formatted_watch_duration: '0h 9m',{
    date: '2021-05-05',formatted_date: 'May 05',];

如果 location 包含空,我想在下面的格式中考虑 0。假设数据的 total_views 值。

 this.geographySeriesData = [
      {
         name: 'India',data: [500,555,444,777,877,9944,750],{
         name: 'USA',data: [10,1000,1200,500],}

     ];

解决方法

您可以使用此代码进行转换。这不是最佳的,但非常简单易懂。您需要的数据存储在 finalResult 变量中。

const result = {};

const locations = data.map(el => el.location).flat();
locations.forEach(loc => {
    result[loc.country] = [];
});
locations.forEach(loc => {
    result[loc.country].push(loc.total_views);
});

const finalResult = Object.keys(result).map(key => ({ name: key,data: result[key]}));
,

你可以实现像这样的确切格式

countryList = []
countryObject = {}

data.forEach((d) => {
  d.location.forEach((loc) => {
    if(loc.country in countryObject){
      countryViewsList = countryObject[loc.country]
      countryViewsList.push(loc.total_views)
      countryObject[loc.country] = countryViewsList
    } else {
      countryObject = Object.assign(countryObject,{[loc.country]: [loc.total_views]})
    }
  })
})

Object.keys(countryObject).forEach((k)=>{
  countryList.push({
    name: k,data: countryObject[k]
  })
})

countryList 是您要求的确切格式。