RX JS лучший способ отобразить и отфильтровать массив внутри Observable <object> - PullRequest
0 голосов
/ 21 апреля 2020

Это очень простая версия того, что я пытаюсь выполнить sh. В настоящее время он работает так, как задумано, но мне просто интересно, есть ли более короткий / более чистый способ реализации операторов внутри pipe ()

Текущее поведение: вызов канала в наблюдаемой, которая содержит свойство с массивом «Предметы». Внутри трубы отфильтруйте, отсортируйте и затем опубликуйте sh элементы для объекта поведения.

  public items$: BehaviorSubject

  public testObservable = () =>
    of({
      Test: '123',
      Properties: 'props',
      Items: [
        { key: 1, val: 'test1' },
        { key: 2, val: 'test2' },
        { key: 3, val: 'test3' }
      ]
    });

  testMethod() {
    this.testObservable()
      .pipe(
        pluck('Items'),
        map(items => items.filter(item => item.key != 2)),
        map(items => items.sort((a, b) => (a.key > b.key ? 1 : -1))),
        tap(items => { this.items$.next(items) })
      );

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Ну, я мог бы написать просто

this.testObservable()
  .pipe(
    map(value => 
        value.items.filter(item => item.key != 2)
             .sort((a, b) => (a.key > b.key ? 1 : -1))
    ),
    tap(this.items$.next)
  )
0 голосов
/ 21 апреля 2020

Я думаю, что вы чрезмерно проектируете простую задачу, потому что манипулирование данными не имеет каких-либо журналов событий c, что является целью реактивного программирования.

Итак, чем лучше заниматься это:

testMethod() {
  this.testObservable().pipe(map(items => {
    // all logic here
  }));
}
...