我如何将服务的输出映射到Angular中具有特定值的对象?

问题描述 投票:0回答:2

我有一个工作函数,它将服务调用的输出映射到一个对象,然后将它们映射到一个数组。

API的响应类似于:

[
  {
     "paper_id": "0015023cc",
     "metadata": { }
     "abstract": []
     ...
  }
  {
     "paper_id": "0015023cc",
     "metadata": { }
     "abstract": []
     ...
  }
]
papersList(): Observable<Paper[]> {
        const url = `${this.allPapersUrl}/`;
        return this.http
            .get(url)
            .pipe(
            map((data: any[]) =>
                data.map(
                    (item: any) =>
                        new Paper(item.paperId, item.metadata, item.paperAbstract)
                    )
                )
            );
    }

如何为返回相同对象而不是数组的其他服务编写函数?

新服务的API输出将是:

{
  "paper_id": "0015023cc",
  "metadata": { }
  "abstract": []
  ...
}

我正在尝试完成的代码。

fetchPaper(pvalue: string): Observable<Paper> {
    const url = `${this.paperDetailUrl}`;
    params.append('paperid', pvalue);
    const url = `${this.paperDetailUrl}`;

    return this.http
             .get(url, {params: params})
             .pipe( ??? 
angular rxjs angular-http angular-pipe
2个回答
0
投票

相同的运算符map()

return this.http
  .get(url, { params })
  .pipe(
    map(({ paperId, metadata, paperAbstract }) => new Paper(paperId, metadata, paperAbstract)),
  );

0
投票

然后您无需循环。另请注意,您在响应中得到abstract,而不是paperAbstract

 return this.http
                 .get(url, {params: params})
                 .map(data:any => new Paper(data.paperId, data.metadata, data.abstract) )
© www.soinside.com 2019 - 2024. All rights reserved.