Rx Js Как отобразить дочерние объекты при возврате родительского объекта? - PullRequest
0 голосов
/ 16 марта 2020

У меня есть сложный объект, возвращающийся из API. Я пытаюсь вернуть объект с его дочерним массивом объектов в качестве наблюдаемого. Я хотел бы иметь возможность выполнять функцию для атрибута Content каждого дочернего объекта в массиве, чтобы преобразовать его, но я ускользнул от синтаксиса. Как я могу это исправить?

Вот мои объекты:

export interface ChartsViewData {
Title: string;
ItemType: number;
ChartContents: ChartContent[];
}

export interface ChartContent{
Id: number;
Content: string;
ContentType: string;
}

Вот вызов API в моем сервисе, который возвращает данные в родительском дочернем формате перед желаемым изменить:

getCharts() : Observable<ChartsViewData>{
   return this.http.get<ChartsViewData>(myUrl);
}

Вот то, что я пытался, но я не могу понять синтаксис правильно.

getCharts(): Observable<ChartsViewData>{
   return this.http.get<ChartsViewData>(myUrl).pipe(
    map(chartViewData => chartViewData.ChartContents.forEach((item:ChartContent) => {
      return { 
         Id: item.Id,
         Content: this.myTransformFunction(item.Content),
         ContentType: item.ContentType
      }
   );
}

1 Ответ

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

Вы должны map использовать массив map, forEach просто проходит через него. map преобразует массив, чтобы сделать это способом forEach, для его перезаписи потребуется всего лишь item.Content = this.myTransformFunction(item.Content); внутри forEach. Вы можете решить, какой из них вам больше нравится.

Попробуйте:

getCharts(): Observable<ChartsViewData>{
   return this.http.get<ChartsViewData>(myUrl).pipe(
   // Put .map and not .forEach
    map(chartViewData => chartViewData.ChartContents.map((item:ChartContent) => {
      return { 
         Id: item.Id,
         Content: this.myTransformFunction(item.Content),
         ContentType: item.ContentType
      }
   );
}
...