【问题标题】:RxJS - Translating Observable of an Array to a new Observable of an ArrayRxJS - 将数组的 Observable 转换为数组的新 Observable
【发布时间】:2017-07-30 18:18:12
【问题描述】:

我有一个 oberservable,它是一个数组:

items$: Observable<CarClassification[]>;

我正在尝试将其翻译/转换为一个新的 Observable 数组,该数组由 SelectItems 组成,用于下拉框。

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

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

我是 RxJS 的新手,我尝试了一些不同的方法,但似乎都没有奏效。我搜索的 StackOverflow 数量与我想的一样多。

CarClassification 有两个属性,IdName,我想将它们设置为 valuelabel 选择项目

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

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

但是如何正确地遍历 items 中的每个 item,并为每个 SelectItem 返回一个新的 SelectItem 一直困扰着我。 p>

【问题讨论】:

    标签: arrays rxjs observable


    【解决方案1】:

    如果你有一个发出数组的 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[]>

    【讨论】:

      猜你喜欢
      • 2020-12-01
      • 1970-01-01
      • 2021-05-24
      • 2023-03-16
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2017-09-24
      • 2021-10-27
      相关资源
      最近更新 更多