将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
});
});
});
是的……我也尝试过类似的方法,请看下面我的答案,但我只是想知道是否有更好的方法,如何更好地定义?