javascript - 可观察的转换

标签 javascript typescript rxjs observable

我对 Observables 很陌生,这对其他人来说可能是个愚蠢的问题,但我找不到解决方法。我如何转换 Observable<Array<T>>其中 T是一个带有属性 Id(string) 的 TypeScript 类进入 Array<string> ?我想转换 Id属性转换为字符串数组。

最佳答案

你想在这里做两件事:

  1. 将源数组中的所有数组展平为 T 的单个可观察对象
  2. T 的每个实例映射到 Id 属性

您可以使用 mergeAll像在普通 JS 数组上使用 reduce 一样展平 observable。

const source = Rx.Observable.of(
  [{ Id: '1' }, { Id: '2' }],
  [{ Id: '3' }, { Id: '4' }]
 );

const flattened = source.mergeAll();

flattened.subscribe(s => console.log(s));
// => {Id:'1'}, {Id:'2'}, {Id:'3'}, {Id:'4'}

然后您可以使用 map (与普通的 JS 数组一样)提取 Id 属性

const mapped = flattened.map(s => s.Id);

mapped.subscribe(s => console.log(s))
// => '1', '2', '3', '4'

将其全部放入 1 个语句中,然后...

source
  .mergeAll()
  .map(s => s.Id)
  .subscribe(s => console.log(s))

// => '1', '2', '3', '4'

关于javascript - 可观察的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45507888/

相关文章:

Javascript "virtual browser"

javascript - JS/jquery 根据点击元素的 id 获取可变文本

javascript - 如何在运行时检查类 B 是否扩展 A

angular - 返回 promise 并从中创建可观察对象时,Typescript Angular2 出错

angular - combineLatest 与 FormControl valueChanges 事件绑定(bind)不发出

javascript - Rxjs 包装 D3 (Observable) 中的其他库函数

javascript - 如何设置一个字段等于postId [METEOR]

javascript - 如何在JS中使用变量作为文件路径?

Angular2 事件发射器未得到处理

angular - 如何组合多个 Observables 并在单个订阅中获取所有结果