Angular - объединить результаты запроса https в один массив - PullRequest
2 голосов
/ 25 сентября 2019

Я работаю с двумя запросами https от двух разных конечных точек и использую forkJoin для объединения двух результатов.Я борюсь с тем, чтобы передать данные из «информации» соответствующей команде в «турнирной таблице», поскольку «информация» содержит более подробную информацию о каждой футбольной команде.

Мой сервис:

  espStandings() {
    return this.httpClient.get<Leagueinfo>('http://site.web.api.espn.com/apis/v2/sports/soccer/esp.1/standings?desc');
  }
  espInfo() {
    return this.httpClient.get<Teaminfo>('https://site.api.espn.com/apis/site/v2/sports/soccer/esp.1/teams');
  }
  public getEsp() {
    return forkJoin(this.espStandings(), this.espInfo()).pipe(map(([standings, info]) => {
      return { standings, info };
    }));
  }

Таблица результатов возвращает массив со всеми подобными командами (это первая команда в массиве записей):

entries: Array(20)
0:
note: {color: "#81D6AC", description: "Champions League", rank: 1}
stats: (10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
team: {id: "3747", uid: "s:600~t:3747", location: "Granada", name: "Granada", abbreviation: "GCF", …}

Я хочу добавить еще один объект с именем «запись» к каждой команде в«записи» с данными из «инфо».

Объект «запись» из результата «инфо» выглядит следующим образом:

record:
items: Array(1)
0:
stats: (22) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]

Таким образом, конечный результат для каждой команды будет:

entries: Array(20)
0:
note: {color: "#81D6AC", description: "Champions League", rank: 1}
stats: (10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
team: {id: "3747", uid: "s:600~t:3747", location: "Granada", name: "Granada", abbreviation: "GCF", …}
record: {items: Array(1)}

Пример JSON для турнирной таблицы:

{
    "uid": "s:600~l:740",
    "id": "15",
    "name": "Spanish Primera División",
    "abbreviation": "La Liga",
    "children": [
        {
            "uid": "s:600~l:740~g:1",
            "id": "1",
            "name": "2019-20 LaLiga",
            "abbreviation": "2019-2020",
            "standings": {
                "id": "0",
                "name": "overall",
                "displayName": "Overall Standings",
                "links": [
                    {
                        "language": "en",
                        "rel": [
                            "standings",
                            "desktop"
                        ],
                        "href": "http://www.espn.com/spanish-primera-division/15/table",
                        "text": "Table",
                        "shortText": "Table",
                        "isExternal": false,
                        "isPremium": false
                    }
                ],
                "season": 2019,
                "seasonType": 1,
                "entries": [
                    {
                        "team": {
                            "id": "3747",
                            "uid": "s:600~t:3747",
                            "location": "Granada",
                            "name": "Granada",
                            "abbreviation": "GCF",
                            "displayName": "Granada",
                            "shortDisplayName": "Granada",
                            "isActive": true,
                            "logos": [
                                {
                                    "href": "https://a.espncdn.com/i/teamlogos/soccer/500/3747.png",
                                    "width": 500,
                                    "height": 500,
                                    "alt": "",
                                    "rel": [
                                        "full",
                                        "default"
                                    ]
                                }
                            ],
                            "links": [
                                {
                                    "language": "en",
                                    "rel": [
                                        "clubhouse",
                                        "desktop",
                                        "team"
                                    ],
                                    "href": "http://www.espn.com/football/club/_/id/3747/granada",
                                    "text": "Clubhouse",
                                    "shortText": "Clubhouse",
                                    "isExternal": false,
                                    "isPremium": false
                                }
                            ]
                        },
                        "note": {
                            "color": "#81D6AC",
                            "description": "Champions League",
                            "rank": 1
                        },
                        "stats": [
                            {
                            }
                        ]

Пример JSON для информации:

{
    "sports": [
        {
            "id": "600",
            "uid": "s:600",
            "name": "Football",
            "slug": "soccer",
            "leagues": [
                {
                    "id": "740",
                    "uid": "s:600~l:740",
                    "name": "Spanish Primera División",
                    "abbreviation": "La Liga",
                    "shortName": "La Liga",
                    "slug": "spanish-primera-division",
                    "teams": [
                        {
                            "team": {
                                "id": "96",
                                "uid": "s:600~t:96",
                                "slug": "alaves",
                                "location": "Alavés",
                                "name": "Alavés",
                                "abbreviation": "ALV",
                                "displayName": "Alavés",
                                "shortDisplayName": "Alavés",
                                "color": "0000ff",
                                "alternateColor": "C8142F",
                                "isActive": true,
                                "isAllStar": false,
                                "logos": [
                                    {
                                        "href": "https://a.espncdn.com/i/teamlogos/soccer/500/96.png",
                                        "width": 500,
                                        "height": 500,
                                        "alt": "",
                                        "rel": [
                                            "full",
                                            "default"
                                        ]
                                    },
                                    {
                                        "href": "https://a.espncdn.com/i/teamlogos/soccer/500-dark/96.png",
                                        "width": 500,
                                        "height": 500,
                                        "alt": "",
                                        "rel": [
                                            "full",
                                            "dark"
                                        ]
                                    }
                                ],
                                "record": {
                                    "items": [
                                        {
                                            "summary": "1-2-2",
                                            "stats": []
                                        }

Надеясь, что кто-то может указать мне правильное направление.

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