我的Web服务返回一堆对象,我希望在Angular服务将它们发送到使用组件之前,通过将“state”字段更改为其他对象来操纵这些对象。
我已尝试使用地图迭代数组并将字段替换为已翻译的字段,但这似乎不起作用(即使console.log显示job.state确实更改):
return this.http
.get(this.jobsUrl, options)
.map(res => {
console.log(job.state); //shows original value
res.json().jobs.map((job) => job.state = this.stateTranslation[job.state]);
console.log(job.state); //shows translated value
return res.json().jobs as Job[];
})
.catch(this.handleError);
也许map只返回“job”的副本,并且原始对象实际上没有被修改?
答案 0 :(得分:2)
创建2张地图。 1用于转换为JSON
,另一个用于循环遍历数组。这增加了可读性。您遇到的问题是您拨打res.json
两次,这意味着您对第一个阵列所做的更改永远不会到达第二个阵列。
return this.http
.get(this.jobsUrl, options)
.map(res => res.json().jobs as Job[])
.map((job: Job) => {
job.state = this.stateTranslation[job.state]);
return job;
})
.catch(this.handleError);
答案 1 :(得分:0)
你应该在地图后面返回结果,并在数组映射回调中改变它的状态后返回作业:
return this.http
.get(this.jobsUrl, options)
.map(res => {
let ret = res.json().jobs.map((job) => {
job.state = this.stateTranslation[job.state];
return job;
});
return ret as Job[];
})
.catch(this.handleError);