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

How can i map the output from a service to an Object with specific values in Angular?

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

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)
                    )
                )
            );
    }

如何为 returns 相同对象而不是数组的另一个服务编写函数?

新服务 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( ??? 

相同的运算符 map()

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

那你就不需要循环了。另请注意,您在响应中得到 abstract 而不是 paperAbstract

 return this.http
                 .get(url, {params: params})
                 .pipe(map(data:any => new Paper(data.paperId, data.metadata, data.abstract) ) )