假设有一个端点返回结构的内容:
{
results: [
{hoofed: {
//animal1
}
},
{feline: {
//animal2
}},
{other: {
//animal3
}}
]
}
假设我有这样的东西:
import {RxHR} from '@akanass/rx-http-request'
return RxHR.get('www.third_party.com')
.pluck('body')
.map(JSON.parse)
.pluck('results')
.map((animals) => animals.map((animal) => animal['hoofed'] || animal['feline']))
我希望它具有以下行为:
1) 提取响应正文。
2)解析JSON
3)提取所有结果
4) 在有蹄类或猫科动物的键上拉取值,产生:
[animal1, animal2]
相反,这仅返回第一个匹配条件的项目,例如[animal1]
而不是像我期望的那样将数组映射到另一个数组。我的问题是,为什么?而我怎样才能实现这样的内心转变呢?
最佳答案
实际上,您的流会返回诸如[animal1,animal2,undefined]
之类的内容。该流缺少过滤器运算符。
const flatAnimal = animal => animal['hoofed'] || animal['feline']
Rx.Observable.of(results)
.map(JSON.parse)
.map((animals) => animals.filter(flatAnimal).map(flatAnimal))
或者您可以将数组作为可观察序列使用
Rx.Observable.of(results)
.flatMap(JSON.parse)
.filter(flatAnimal)
.map(flatAnimal)
.toArray()
关于javascript - rxjs 内部原生 map 提前退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44249759/