【问题标题】:How to map an Observable to another type of Observable?如何将 Observable 映射到另一种类型的 Observable?
【发布时间】:2018-04-13 20:08:52
【问题描述】:

我有这个

  public getRouteData(): BehaviorSubject<string[]> {
     return this.routeData;
  }

我想将此映射到 {name: r} 的 Observable,其中 rstring[] 中的一个项目

public gridData: BehaviorSubject<any[]> = new BehaviorSubject([]);

我想将string[] 映射到对象数组{name: r},其中r 是数组项,以便我可以将对象数组绑定到网格。

不知何故无法排序或语法正确。

试过getRouteData().map(r =&gt; ({name: r})).subscribe(r =&gt; this.gridData.next(r));,但这不正确,因为我最终得到{name:string[]}而不是[{name:string}]

有人可以帮忙吗?

谢谢!

【问题讨论】:

  • 您误解了可观察对象的工作原理。如果您的 observable 正在处理 string[],这就是您作为 map 的参数得到的。如果您的 observable 一次发出一个字符串,它应该是 BehaviourSubject&lt;string&gt;,而不是 BehaviorSubject&lt;string[]&gt;。然后您的地图参数将获得string,而不是string[]
  • 所以你想要Observable&lt;{ name: string }[]&gt;而不是Observable&lt;string[]&gt;
  • Daniel W Strimpel - 是的,这正是我所需要的。那么地图不对?

标签: angular rxjs5


【解决方案1】:

如果我理解正确,我认为您正在寻找这个:

getRouteData() // => Observable<string[]>
    .map(r => r.map(v => ({name: v}))) // => Observable<{ name: string }[]>
    .subscribe(r => this.gridData.next(r));

外部map(...) 正在迭代从您的可观察对象发出的每个值。所以,r 的类型是 string[]

内部map(...) 遍历r 数组中的每个元素,并将string 转换为{ name: string } 类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2018-11-21
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多