将javascript对象从一种形式转换为另一种形式

将javascript对象从一种形式转换为另一种形式,javascript,arrays,json,mapreduce,Javascript,Arrays,Json,Mapreduce,我有一个团队对象列表,其中包括团队名称、报告人和该团队每天的状态列表,我希望将其转换为基于日期的对象列表,其中包含所有团队及其各自日期的状态 我尝试过类似的方法,但没有达到预期的效果 teams.map(team => ({ day: team.statuses.reduce((acc, it) => it.day), teams: { teamName: team.teamName } })) [ { "t

我有一个团队对象列表,其中包括团队名称、报告人和该团队每天的状态列表,我希望将其转换为基于日期的对象列表,其中包含所有团队及其各自日期的状态


我尝试过类似的方法,但没有达到预期的效果

teams.map(team => ({
    day: team.statuses.reduce((acc, it) => it.day),
    teams: {
        teamName: team.teamName
    }
}))



 [
   {
      "teamName":"abc",
      "reportedBy": "user1",
      "statuses":[
         {
            "day":"10/12",
            "status":"green"
         },
         {
            "day":"10/11",
            "status":"green"
         },
         {
            "day":"10/09",
            "status":"green"
         }
      ]
   },
    {
      "teamName":"xyz",
      "reportedBy": "user2",
      "statuses":[
         {
            "day":"10/12",
            "status":"red"
         },
         {
            "day":"10/11",
            "status":"red"
         },
         {
            "day":"10/09",
            "status":"red"
         }
      ]
   }
]

预期产出:

[
  {
    "day": "1012",
    "teams": [
      {
        "teamName": "abc",
        "reportedBy": "user1",
        "status": "green"
      },
      {
        "teamName": "xyz",
        "reportedBy": "user2",
        "status": "red"
      }
    ]
  },
  {
    "day": "1011",
    "teams": [
      {
        "teamName": "abc",
        "reportedBy": "user1",
        "status": "green"
      },
      {
        "teamName": "xyz",
        "reportedBy": "user2",
        "status": "red"
      }
    ]
  },
  {
    "day": "1009",
    "teams": [
      {
        "teamName": "abc",
        "reportedBy": "user1",
        "status": "green"
      },
      {
        "teamName": "xyz",
        "reportedBy": "user2",
        "status": "red"
      }
    ]
  }
]

我不认为减价是最好的选择。我认为最好创建一个空数组,并在运行时填充:

让输入=[
{
“团队名称”:“abc”,
“报告人”:“用户1”,
“状态”:[
{
“日”:“10/12”,
“状态”:“绿色”
},
{
“日”:“10/11”,
“状态”:“绿色”
},
{
“日期”:“10/09”,
“状态”:“绿色”
}
]
},
{
“团队名称”:“xyz”,
“报告人”:“用户2”,
“状态”:[
{
“日”:“10/12”,
“状态”:“红色”
},
{
“日”:“10/11”,
“状态”:“红色”
},
{
“日期”:“10/09”,
“状态”:“红色”
}
]
}
];
让输出=[];
input.forEach(团队=>
{
让name=team.teamName;
let reporter=team.reporter
team.status.forEach(状态=>
{
让dayItem=output.find(item=>item.day==status.day);
如果(dayItem==null)
{
让newItem={day:status.day,teams:[{status:status.status,reportedBy:reporter,teamName:name}]};
输出推送(newItem);
}
其他的
{
dayItem.teams.push({status:status.status,reportedBy:reporter,teamName:name})
}
});
});

log(JSON.stringify(output))我尝试过以下方法

  let dayIndexed = {};
  let dayStatuses = [];

  teams.forEach(function(team) {
        team.statuses.forEach(function(status) {
            status.day = status.day.replace(/\//g, '');
            if(!dayIndexed[status.day]) {
                dayIndexed[status.day] = {
                    day: status.day,
                    teams: []
                };
                dayStatuses.push(dayIndexed[status.day]);
            }
    
            dayIndexed[status.day].teams.push({
                teamName: team.teamName,
                reportedBy: team.reportedBy,
                status: status.status   
            });
        });
    });

是的……我也尝试过类似的方法,请看下面我的答案,但我只是想知道是否有更好的方法,如何更好地定义?