Как извлечь указанный c ключ / значение во время Http-вызова в angular? - PullRequest
1 голос
/ 26 марта 2020

Через HTTP-вызов я получаю файл JSON, как показано ниже:

[
    {
        "totalConfirmed": 555,
        "mainlandChina": 548,
        "otherLocations": 7,
        "deltaConfirmed": 555,
        "totalRecovered": 0,
        "confirmed": {
            "total": 555,
            "china": 548,
            "outsideChina": 7
        },
        "deaths": {
            "total": 17,
            "china": 17,
            "outsideChina": 0
        },
        "reportDate": "2020-01-22"
    },
    {
        "totalConfirmed": 654,
        "mainlandChina": 643,
        "otherLocations": 11,
        "deltaConfirmed": 99,
        "totalRecovered": 0,
        "confirmed": {
            "total": 654,
            "china": 643,
            "outsideChina": 11
        },
        "deaths": {
            "total": 18,
            "china": 18,
            "outsideChina": 0
        },
        "reportDate": "2020-01-23"
    }
]

, из этого я хочу сохранить значение totalConfirmed, deaths & reportDate. Так что мое возвращение будет примерно таким:

{ 
   totalConfirmed : [555,654], 
   death: [17, 18], 
   dates: ["2020-01-22", "2020-01-23"]
}

Вот функция, которую я написал в моем service.ts:

public filteredData(): Observable<History> {
let dataHistory: History;
return this.httpClient.get(this.hostURL).pipe(
  map(res => {       

    dataHistory.totalConfirmedPerDay.push(res["totalConfirmed"]);
    dataHistory.totalDeathPerDay.push(res["deaths"]["total"]);
    dataHistory.dates.push(res["reportDate"]);
    return dataHistory;
  })
);

}

и вот Мой интерфейс истории:

export interface History {
  totalConfirmedPerDay: any[];
  totalDeathPerDay: any[];
  dates: any[any];
}

Но, к сожалению, теперь он работает. У меня эта ошибка:

ERROR TypeError: Cannot read property 'totalConfirmedPerDay' of undefined

Ответы [ 3 ]

1 голос
/ 26 марта 2020

способ сделать карту -

map((full:any[]) => {   //I don't want full    
   full.map(res=>{  //I want a "resumed" of full
     const obj={        //transform each element of full
       totalConfirmed:res.totalConfirmed,
       totalDeathPerDay:res.deaths.total,
       dates.res.reportDate
     }
     return obj; 
   )
   return full;
  })
1 голос
/ 26 марта 2020

Вы можете сделать это, используя:

return this.httpClient.get(this.hostURL)
  .pipe(
    map(arr => {
      return arr.map(sub => {
        return {
          totalConfirmed: sub.totalConfirmed,
          totalDeathPerDay: sub.deaths.total,
          dates: sub.reportDate
        };
      });
    })
  )

сейчас в блоке подписки:

.subscribe(res => {
   let op: History = {
     totalConfirmedPerDay: [],
     totalDeathPerDay: [],
     dates: []
   };
   res.forEach(e => {
     op.totalConfirmedPerDay.push(e.totalConfirmedPerDay);
     op.totalDeathPerDay.push(e.totalDeathPerDay);
     op.dates.push(e.dates);
   });
});
1 голос
/ 26 марта 2020

Ошибка опечатки: dataHistory не инициализировано.

public filteredData(): Observable<History> {
  return this.httpClient.get(this.hostURL).pipe(
    map(res => {
      return {
        totalConfirmedPerDay: res.totalConfirmed,
        totalDeathPerDay: res.deaths.total,
        dates: res.reportDate
      };
    })
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...