Roy*_*mir 2 javascript rxjs rxjs5 angular
我创建了一个Http请求来获取json数据.在json里面 - 有一个有阵列的物体.(我需要那个数组).
fromDb$ = of({
Result: {
Countries: [{ <--wanted array
ISOCode: 1,
Name: 'aaa'
}, {
ISOCode: 2,
Name: 'bbb'
}]
}
});
Run Code Online (Sandbox Code Playgroud)
但是 - 数组中的数据具有与实际需要不同的结构.
我需要将(name&ISOcode)映射到(name和value )
这就是我尝试过的:
pluck提取内部阵列mergeMap数组对象到对象流(使用of())map到每个项目变换到所希望的结构toArray于所有换到一个阵列(这样我就可以将其绑定到控制)这是实际的代码:
this.data = this.fromDb$.pipe(pluck<PtCountries, Array<Country>>('Result', 'Countries'),
mergeMap(a => from(a)),
map((c: Country) => ({
name: c.Name,
value: c.ISOCode,
})),
toArray());
Run Code Online (Sandbox Code Playgroud)
代码确实有效,这是在线演示
题
看起来我的复杂程度远远超过它,是否有更好的方法呢?
这一行:mergeMap(a => from(a))没有多大意义.这几乎就像你做的那样[1,2,3].map(v => v).你可以删除它.
为了简化这一点,您基本上需要在Observable.map中使用Array.map.
试试这个:
this.data = this.fromDb$.pipe(pluck<PtCountries, Array<Country>>('Result', 'Countries'),
map((countries: Country[]) => countries.map(country => ({
name: country.Name,
value: country.ISOCode,
}))));
Run Code Online (Sandbox Code Playgroud)