RxJS - 将数组的Observable转换为数组的新Observable

时间:2017-03-09 16:42:20

标签: arrays rxjs observable

我有一个令人难以置信的,这是一个阵列:

items$: Observable<CarClassification[]>;

我正在尝试将其转换/转换为一个新的Observable,其中包含一个 SelectItems 数组,用于下拉框。

get SelectItems(): Observable<SelectItem[]> { ...

然后我可以将其设置为下拉框的数据源,并且,如果 items $ 中的任何项目被修改,删除或添加了新项目, SelectItems的数组改变了。我遇到的问题是我有几十个需要以这种方式定义的数组(更大对象的标准)。我尝试过的所有东西,如果有效的话,都太慢了(订阅了observable并推向了一个新阵列),我正在寻找一种更加无缝的方式。

我是RxJS的新手,我尝试了一些不同的东西,但似乎都没有用。我搜索的StackOverflow和我想象的一样多。

CarClassification有两个属性, Id 名称我想要使标签 的SelectItem

我知道我可以将observable映射到数组:

items$.map((items) => { ...

但是如何正确迭代项目中的每个项目,并为每个项目返回一个新的 SelectItem 一直在逃避我。

1 个答案:

答案 0 :(得分:3)

如果你有一个发射阵列的Observable,你总是可以用concatAll()解压缩它,然后再打包它,例如:

Observable.of([{...}, {...}, {...}])
  .concatAll() // unpack
  // will emit each {...} as a single value
  .toArray() // pack

但您根本不需要使用Rx来转换数组:

items$.map((items: CarClassification[]) => {
  return items.map((item: CarClassification) => new SelectItem(...));
});

现在你有Observable<SelectItem[]>