免责声明:我有一个简单的解决方案,想在这里记录下来。
我一直在寻找满足此要求的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运算符吗?
答案 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)));
}
}