Оператор RxJS для отображения элементов массива массивов - PullRequest
0 голосов
/ 10 января 2019

отказ от ответственности: у меня есть простое решение, и я хочу документировать его здесь.

Я просматривал документацию RxJS для методов карты , которые соответствуют этому требованию - давайте назовем это mapArray - но не смогли его найти.

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

Мне нужен оператор, который преобразует Observable из одного или нескольких массивов (Obserable<T[][]>) и выполняет операцию отображения для каждого из отдельных элементов каждого массива.

Обычный вариант использования для меня заключается в том, что я получаю список элементов с сервера и хочу преобразовать каждое представление json в соответствующие им классы Typescript. Это единственный наблюдаемый элемент (только один массив), но меня может заинтересовать общий случай (1 или более массивов).

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

Я сталкивался с этой проблемой достаточно, чтобы гарантировать для нее специальный оператор. Кто-нибудь знает для этого собственный оператор RxJS?

1 Ответ

0 голосов
/ 10 января 2019

Это решение делегирует соответствующий оператор 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)));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...