我有3个API端点(候选人,空缺和面试)。
{
"candidates": [
{
"id": 1,
"name": "Serj"
},
{
"id": 2,
"name": "Alex"
},
],
"vacancies": [
{
"id": 1,
"title": "Java"
},
{
"id": 2,
"title": "JS"
},
],
"interviews": [
{
"id": 1,
"candidateId": 1,
"vacancyId": 2,
"date": "2018-12-11"
},
{
"id": 2,
"candidateId": 2,
"vacancyId": 1,
"date": "2018-12-11"
},
]
}首先,我按日期接受面试,并进行了一系列的面试。
const params = new HttpParams().set('date', '2018-12-11');
this.http.get('http://localhost:3000/interviews', {params}).pipe();当我subscribe()到pipe()的输出时,我想得到一系列的访谈,其中"candidateId"和"vacancyId"是从适当的端点获取的实际对象,candidate和vacancy。
因此结果(Interview[])应该如下所示:
[
{
"id": 1,
"candidate": {
"id": 1,
"name": "Serj"
},
"vacancy": {
// vacancy instance
},
"date": "2018-12-11"
},
// second interview object
]谢谢你的帮助!
发布于 2018-12-09 07:56:29
如果我理解得对,那么您希望您的面试响应被过滤掉,以包含一个只包含字段candidateId和vacancyId的对象数组?
如果是这样的话,您可以使用以下方法:
this.http.get('http://localhost:3000/interviews', {params})
.pipe(
flatMap(item => item),
map(({ candidates, vacancies, interviews}) =>
interviews.map(({ id, candidateId, vacancyId, date }) => ({
id,
candidate: candidates.filter(c => c.id === candidateId)[0],
vacancy: vacancies.filter(v => v.id === vacancyId)[0],
date
})
)),
reduce((acc, val) => [acc, val])
)
.subscribe(response => console.log(response));已经创建了一个Stackblitz演示供您参考。
https://stackoverflow.com/questions/53689990
复制相似问题