Рекурсивное построение объекта

Рейтинг: 0Ответов: 0Опубликовано: 01.06.2023

Задача: создать турнирную сетку по системе 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? Число игр может быть разным, в зависимости от количества команд.

Ответы

Ответов пока нет.