Javascript 可观测变换

Javascript 可观测变换,javascript,typescript,rxjs,observable,Javascript,Typescript,Rxjs,Observable,我对可观察物很陌生,这对其他人来说可能是个愚蠢的问题,但我找不到一个方法来解决。我如何转换 Observable其中T是一个类型脚本类,其属性Id(string)为数组?我想将Id属性转换为字符串数组 您可以在javascript数组上使用类似的reduce操作符。RxJS reduce运算符将在完成时对整个流进行操作 请参见示例: let data$ = new Rx.Subject(); data$ .reduce((acc, el) => {acc.push(...el

我对可观察物很陌生,这对其他人来说可能是个愚蠢的问题,但我找不到一个方法来解决。我如何转换
Observable
其中
T
是一个类型脚本类,其属性
Id(string)
数组
?我想将
Id
属性转换为字符串数组

您可以在javascript数组上使用类似的reduce操作符。RxJS reduce运算符将在完成时对整个流进行操作

请参见示例:

 let data$ = new Rx.Subject();

 data$
    .reduce((acc, el) => {acc.push(...el); return acc;}, [])
    .subscribe(x=>console.log(x));

  data$.next([{id:'1'}, {id:'2'}]);
  data$.next([{id:'3'}, {id:'4'}]);
  data$.complete();

您在这里尝试做两件事:

  • 将源阵列中的所有阵列展平为单个可见的
    T
  • T
    的每个实例映射到
    Id
    属性
  • 您可以像在普通JS数组上使用
    reduce
    一样,使用来展平可观察对象

    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'}
    
    然后可以使用(与普通JS数组一样)提取
    Id
    属性

    const mapped = flattened.map(s => s.Id);
    
    mapped.subscribe(s => console.log(s))
    // => '1', '2', '3', '4'
    
    把它全部放到一个语句中,然后

    source
      .mergeAll()
      .map(s => s.Id)
      .subscribe(s => console.log(s))
    
    // => '1', '2', '3', '4'
    

    你能看一下这个吗?你看了
    地图
    接线员了吗?@Aravind谢谢你的建议,但我不认为这回答了我的问题,尽管我从中得到了一些想法。是的。这就是为什么我让你参考那个答案。你能把代码更新到最新版本吗post@Hitmands是的,我目前正在研究map函数,但是这个概念是关于数组而不是可观察数组的,或者我完全忽略了一些东西。实现应该像map函数一样,我只是还不能理解它,因为我对它也是新手。纯c#dev在此之前:)