Angular 将多个对象合并到从服务器获取的对象数组中?
我从服务器获取多个对象,并返回我希望将它们存储为angular 4中的对象数组 服务:Angular 将多个对象合并到从服务器获取的对象数组中?,angular,observable,Angular,Observable,我从服务器获取多个对象,并返回我希望将它们存储为angular 4中的对象数组 服务: search(term: string): Observable<Array<Object>> { let apiURL =`${this.apiRoot}?search=${term}`; return this.http.get(apiURL) .map(res => { return res.json()
search(term: string): Observable<Array<Object>> {
let apiURL =`${this.apiRoot}?search=${term}`;
return this.http.get(apiURL)
.map(res => {
return res.json().results.map(items => {
items.name,
items.population
});
});
}
}
我没有得到对象数组 可以使用将数组连接在一起。如果这些是对象的数组,您将基本上将这些数组合并为一个大数组。例如,这个
[].concat([{name:'foo'}], [{name:'bar'}], [{name:'baz'}])
…将计算为包含3个对象的单个数组:
[{name:'foo'}, {name:'bar'}, {name:'baz'}]
即使对象不在数组中,执行以下操作也会得到相同的结果:
[].concat({name:'foo'}, {name:'bar'}, {name:'baz'})
因此,在您的代码中,您应该能够执行类似的操作,因为items.name
和items.population
都是对象:
search(term: string): Observable<Array<Object>> {
let apiURL =`${this.apiRoot}?search=${term}`;
return this.http.get(apiURL)
.map(res => {
return res.json().results.map(items => {
return [].concat(items.name, items.population);
});
});
}
现在您将获得一个对象数组,如下所示:
[{name: ..., population: ...}, {...}]
搜索(术语:字符串):可观察{
让apirl=`${this.apiRoot}?search=${term}`;
返回此.http.get(APIRL)
.map(res=>res.json().results)
.flatMap(结果=>可观察的.from(结果))
//下面正在进行单值重新映射
.map(结果=>{
name:result.name,
人口:结果
})
.toArray();
}
flatmap用于将值(数组)转换为发出单个值的可观测值。flatMap之后的贴图用于重塑项目的形状。最后的toArray将所有发出的值捆绑起来。这种方法可能比第一次映射调用中的直接映射更详细,但它更简洁,易于更改,而且不嵌套结果映射是否返回一个完整的起始数组?看起来它应该什么也不返回,除非你有一个对减少数组的引用。数组中的map fn返回一个新数组引用
结果。map
返回一个新数组。如果您想要一个数组,可以使用reduce
将多个数组缩减为一个。@Lansana我要的是数组数组数组,我要的是对象数组。你能告诉我为什么我会这样吗this@TarikSahni更新答案。
search(term: string): Observable<Array<Object>> {
let apiURL =`${this.apiRoot}?search=${term}`;
return this.http.get(apiURL)
.map(res => {
return res.json().results.map(items => {
return {name: items.name, population: items.population};
});
});
}
[{name: ..., population: ...}, {...}]
search(term: string): Observable<Array<Object>> {
let apiURL =`${this.apiRoot}?search=${term}`;
return this.http.get(apiURL)
.map(res => res.json().results )
.flatMap( results => Observable.from(results) )
//single values remap is happening below
.map( result => {
name: result.name,
population : result.population
})
.toArray();
}