代码之家  ›  专栏  ›  技术社区  ›  coderatchet

用于映射数组元素的rxjs运算符

  •  0
  • coderatchet  · 技术社区  · 5 年前

    免责声明:我有一个简单的解决方案,想在这里记录它。

    我一直在看RXJ documentation for map methods 符合这个要求-我们称之为 mapArray -但没能找到。

    of([1, 2, 3]).pipe(
        mapArray(num => num + num)
    ).subscribe(value => console.error(value));
    

    我想要一个能转换一个或多个数组的可观测值的运算符( Obserable<T[][]> )并对每个数组的每个单独元素执行映射操作。

    对于我来说,常见的用例是,我从服务器中检索一个元素列表,并希望将每个JSON表示转换为相应的类型脚本类。这是一个可以观察到的单个项目(只有一个数组),但我会对一般情况(1个或多个数组)感兴趣。

    let people$: Observable<Person> = of([{id: 1, name: 'joe', timestamp: '2019-10-11'}, {...}, ...]).pipe(
        mapArray(Person.fromJson)
    );
    

    我已经遇到了这个问题,足以让一个定制的操作员来处理它。有人知道本地RXJS操作员吗?

    1 回复  |  直到 5 年前
        1
  •  0
  •   coderatchet    5 年前

    此解决方案委托给适当的rxjs pipe->map运算符,然后将函数传递给数组原型上的标准javascript map方法:

    function mapArray<T, R>(elementMapFunction: (T) => R): OperatorFunction<T[], R[]> {
      return function (oT: Observable<T[]>): Observable<R[]> {
        return oT.pipe(map(_array => _array.map(elementMapFunction)));
      }
    }