Как рассчитать средние баллы, набранные командой с ресурсом API Firebase в приложении React? - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь создать приложение React для подсчета средних очков, набранных баскетбольной командой Raptors в последних N домашних играх.

Предполагая, что я использую fetch (url) в методе componentDidMount, и я знаю, как составить список очков Raptors, когда они являются домашней командой:

  componentDidMount() {
    let url = "http://localhost:4000/games?homeTeam=Raptors"
    fetch(url)
      .then(resp => resp.json())
      .then(data => {
        let myGames = data.map((game, index) => {
          return (
            <div key={index}>
              <h3>{game.homeTeamScore}</h3>
            </div>
          )
        })
        this.setState({myGames: myGames});
      })
  }

и это ответ JSON для http://localhost:4000/games (я использую json-сервер, чтобы высмеивать ответ API, как если бы это был ответ noSQL Firebase)

  "games": [{
            "id": 1,
            "date": "2019-05-21",
            "homeTeam": "Raptors",
            "awayTeam": "Bucks",
            "homeTeamPoints": 102,
            "awayTeamPoints": 110,        
        },
        {
            "id": 2,
            "date": "2019-05-20",
            "homeTeam": "Lakers",
            "awayTeam": "Bucks",
            "homeTeamPoints": 102,
            "awayTeamPoints": 110,        
        },
        {
            "id": 3,
            "date": "2019-05-19",
            "homeTeam": "Raptors",
            "awayTeam": "Warriors",
            "homeTeamPoints": 102,
            "awayTeamPoints": 110,        
        }, ... and so on
      ],

Каков наилучший способ для меня получить среднее количество очков Raptors, набранных в их последних 10 домашних играх на сегодняшний день? Что делать, если я хочу, чтобы последние 12 домашних игр предшествовали определенной дате (т. Е. 2 ​​апреля 2019 г.)

Некоторые варианты, которые я могу придумать, но не знаю, какой подход лучше:

  1. Вернуть все домашние игры Raptors, сопоставить только те игры, которые мне интересны, и затем рассчитать среднее значение, используя javascript на стороне клиента.

Минусами этого является то, что если я хочу получить среднее из последних 1000 очков домашней игры Raptors. Это не кажется эффективным, особенно если мне нужен только определенный диапазон дат.

  1. Создайте ресурс API, который позволит мне указать дату начала и количество игр. API будет возвращать баллы Raptors только за N игр до этой даты. Это может выглядеть примерно так: http://localhost.com/teams/raptors/homeGames?sinceDate=20190402&numberGames=20

Минусами этого является то, что я пытаюсь использовать Firebase, и я не уверен, что этот ресурс API - это то, что может сделать Firebase, потому что я не думаю, что Firebase позволяет передавать ему параметры для указания даты начала или количество игр. Кроме того, если бы у меня были / команды / рапторы, мне пришлось бы иметь дубликаты записей для игр в / команды / [противник команды]

Какой лучший способ структурировать эти данные? Должен ли я делать агрегирование и усреднение на стороне клиента? Могу ли я что-то сделать с облачными функциями Google, чтобы включить больше логики на стороне сервера?

Правильный ответ будет выбран на основе того, что проще всего реализовать для новичка в React и Firebase, при этом выполняя требования, указанные выше.

1 Ответ

1 голос
/ 24 мая 2019

Если вы храните дату как метку времени в базе данных, то вы можете использовать orderby и limit, чтобы получить желаемый результат.

firebase.database().ref(endpoint)
  .orderByChild('timestamp')
   .startAt(Specify the date here)
   .limit(100)
  .on('value', function(snapshot) {
   // You can get the values after the particular date and the result will be limited to first 100
 }));
});

Примечание: дата должна быть в формате отметки времени, а не в виде строки. Надеюсь, это поможет

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