Группировка моих данных в представлении - nodejs - PullRequest
0 голосов
/ 27 августа 2018

Я получаю некоторые данные из базы данных postgresql и хочу отобразить их в виде, достаточно простом, как показано ниже

routes.js

app.get('/fixtures', async (req, res) => {
  const fixtures = await queries.getFixtures();
  res.render('fixtures', { fixtures });
});

fixtures returns
[ { id: 27,
    home_team: 'Chelsea',
    away_team: 'Liverpool',
    league_name: 'English Premiership',
  },
  { id: 25,
    home_team: 'Man Utd',
    away_team: 'Everton',
    league_name: 'English Premiership',
  },
  { id: 30,
    home_team: 'Istanbul Basaksehir',
    away_team: 'Akhisar Belediye',
    league_name: 'Turkish Super Lig',
  }
]

getFixtures ();

async function getFixtures() {
  let response;
  try {
    response = await pool.query('select * from fixtures ORDER BY league_name ASC');
  } catch (e) {
    console.error('Error Occurred', e);
  }
  return response.rows;
}

fixtures.ejs

<% fixtures.forEach((fixture) => { %>
   <p><%=fixture.league_name %></p>
   <p><%= fixture.home_team %> vs <%= fixture.away_team %> </p>
<% }) %>

Таким образом, выше будет выводить

English Premiership
Chelsea vs Liverpool

English Premiership
Man Utd v Everton

Turkish Super Lig
Istanbul Basaksehir vs Akhisar Belediye

Однако я хотел бы сгруппировать свои приборы по лиге и предпочел бы вывод вида как

English Premiership
Chelsea vs Liverpool
Man Utd v Everton

Turkish Super Lig
Istanbul Basaksehir vs Akhisar Belediye

Как мне добиться этого? Это что-то на уровне запросов к БД или что-то, что я делаю в представлении? (хотя, наверное, не лучшее место для логики)

Спасибо

1 Ответ

0 голосов
/ 27 августа 2018

Я не уверен, какие инструменты / библиотеки вы используете, но независимо от того, какие библиотеки или инструменты вы используете, вы можете использовать vanilla JavaScript. Например, проверьте следующий код:

app.get('/fixtures', async (req, res) => {

    const fixtures = await queries.getFixtures();

    const grouped = groupByLeagueName(fixtures);

    res.render('fixtures', { fixtures: grouped });
});

Затем реализуйте функцию groupByLeagueName следующим образом:

function groupByLeagueName(fixtures) {

    return fixtures.reduce((result, item) => {

        result[item.league_name] = result[item.league_name] || [];

        result[item.league_name].push(item);

        return result;

    }, {});
}

Тогда, на ваш взгляд, вы можете сделать это примерно так:

<% for (let leagueName in fixtures) { %>

    <p><%= leagueName %></p>

    <% fixtures[leagueName].forEach((match, key) => { %>

        <p><%= match.home_team %> vs <%= match.away_team %> </p>

    <% }) %>

<% } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...