我有一个名为 weeklySchedule 的 JavaScript 数组,它从 API 调用中返回。我的数据的简短示例是:
[
{
"PlayerNumber": 1,
"TeeOff": 1,
"WeekNumber": 1,
"PlayerName": {
"FirstName": "Bob",
"LastName": "Jones"
}
}, {
"PlayerNumber": 2,
"TeeOff": 1,
"WeekNumber ": 1,
"PlayerName": {
"FirstName": "Dave",
"LastName": "Wilson"
}
}, {
"PlayerNumber": 3,
"TeeOff": 2,
"WeekNumber ": 1,
"PlayerName": {
"FirstName": "Homer",
"LastName": "Simpson"
}
}, {
"PlayerNumber": 4,
"TeeOff": 2,
"WeekNumber ": 1,
"PlayerName": {
"FirstName": "Lisa",
"LastName": "Simpson"
}
}
]
...该数据持续数周和多个开球时间值
我想按 WeekNumber 和 TeeOff 对它们进行分组,然后按这两个键对它们进行排序,首先按 WeekNumber,然后按 TeeOff。我通过工作拥有了这个小组:
const groupedPlayers=Object.groupBy(weeklySchedule,
function (item) {
const group = [item.WeekNumber, item.TeeOff];
return group;
});
但是,当我迭代这些时,即使数据已预先排序,顺序也是不确定的,例如:
for (const key in groupedPlayers) {
//the key is not in any expected order
}
我已经进行了高低搜索,阅读了数十个示例,但我所看到的没有任何内容会按 2 个单独的属性进行分组和排序。你能帮忙吗?!
您可以将玩家分组到 2 个嵌套对象中。由于您的排序值是数字,因此它们将自动排序!然后您可以将分组的数据转换为您想要的任何格式。例如,我已经转换为周数数组和开球嵌套数组,因为我发现使用数组最有用(您可以对数据使用数组方法):
const arr = [
{
"PlayerNumber": 1,
"TeeOff": 1,
"WeekNumber": 1,
"PlayerName": {
"FirstName": "Bob",
"LastName": "Jones"
}
}, {
"PlayerNumber": 2,
"TeeOff": 1,
"WeekNumber": 2,
"PlayerName": {
"FirstName": "Dave",
"LastName": "Wilson"
}
}, {
"PlayerNumber": 3,
"TeeOff": 2,
"WeekNumber": 1,
"PlayerName": {
"FirstName": "Homer",
"LastName": "Simpson"
}
}, {
"PlayerNumber": 4,
"TeeOff": 2,
"WeekNumber": 2,
"PlayerName": {
"FirstName": "Lisa",
"LastName": "Simpson"
}
}
]
const grouped = arr.reduce((r, item) => (((r[item.WeekNumber] ??= {})[item.TeeOff] ??= []).push(item), r), {});
console.log(grouped);
const result = Object.entries(grouped).map(([WeekNumber, teeOffs]) =>
({WeekNumber, TeeOffs: Object.entries(teeOffs).map(([TeeOff, Players]) => ({TeeOff, Players}))}));
console.log(result);
.as-console-wrapper{max-height:100%!important}