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

时间:2019-01-10 05:56:22

标签: typescript rxjs

  

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

我一直在寻找满足此要求的RxJS documentation for map methods-我们称它为mapArray-但找不到。

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

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

对我来说,常见的用例是我从服务器上检索元素列表,并希望将每个json表示形式转换为它们相应的Typescript类。这是一个可观察的项目(仅一个数组),但我会对一般情况(1个或多个数组)感兴趣。

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

我已经碰到了这个问题,足以保证需要自定义运算符。有人知道原生RxJS运算符吗?

1 个答案:

答案 0 :(得分:0)

此解决方案委托给相应的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)));
  }
}