Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 将多个对象合并到从服务器获取的对象数组中?_Angular_Observable - Fatal编程技术网

Angular 将多个对象合并到从服务器获取的对象数组中?

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()

我从服务器获取多个对象,并返回我希望将它们存储为angular 4中的对象数组

服务:

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