Рекурсивное построение объекта
Задача: создать турнирную сетку по системе double elimination. Для верхней сетки проблем не возникло, поскольку команды которые выиграли в первом раунде, встречаются во втором, и так далее. Но для нижней сетки, помимо игр среди проигравших в первом раунде, нужно добавить игры среди проигравших во втором раунде верхней сетки.
Например, дан массив игр нижней сетки:
const games = [
{ id: 1, home_name: "Team 1", visitor_name: "Team 3", home_score: 1, visitor_score: 0, round: 2 },
{ id: 2, home_name: "Team 6", visitor_name: "Team 7", home_score: 1, visitor_score: 0, round: 2 },
{ id: 3, home_name: "Team 1", visitor_name: "Team 6", home_score: 0, visitor_score: 1, round: 3 },
{ id: 4, home_name: "Team 4", visitor_name: "Team 5", home_score: 1, visitor_score: 0, round: 3 },
{ id: 5, home_name: "Team 6", visitor_name: "Team 4", home_score: 1, visitor_score: 0, round: 4 },
];
Чтобы отобразить структуру нижней сетки, нужно получить такой объект:
{
name: "Team 6",
children: [
{
name: "Team 4",
children: [{ name: "Team 4" }, { name: "Team 5" }],
},
{
name: "Team 6",
children: [
{ name: "Team 1", children: [{ name: "Team 1" }, { name: "Team 3" }] },
{ name: "Team 6", children: [{ name: "Team 6" }, { name: "Team 7" }] },
],
},
],
}
В родительском объекте Team 6 это победитель нижней сетки, это можно понять из последнего (4) раунда, проведенном между Team 4 и Team 6, в свою очередь Team 4 определен игрой между Team 4 и Team 5 в 3 раунде.
Как будет выглядеть нижняя сетка для этих игр:
Как получить такой объект из массива games? Число игр может быть разным, в зависимости от количества команд.