如何组合和映射可观察对象

How to combine and map observables

我有一个流式传输当前视图状态 (ngrx) 的可观察对象,它是一个对象列表:

this.store.pipe(select('objects'))

和另一个检索当前 URL 参数的索引部分的可观察对象:

this.activatedRoute.params.switchMap(params => params['index'])

如果索引有效,我如何将它们结合起来给我一个在当前索引 (objects[index]) 流式传输对象的可观察对象?

combineLatest怎么样?

this.store.pipe(select('objects')).combineLatest(
  this.activatedRoute.params.map(params => params['index']).filter(index => !isNaN(index)),
  (objects, index) => objects[parseInt(index)]
).filter(object => object !== undefined);

使用selector 更好! 在那种情况下,不需要结合可观察对象,也很容易。

您可以创建一个新的 select 或合并现有的 select 或;

创建一个新的select或使用第一个和第二个可观察对象select或;那么select只有一个

下面的例子是我传递数据和排序参数并按新的排序顺序生成数据select或

export const getDataByOrder = createSelector(
  getAllData,
  getSortParameters,
  (data, sortBy) => {
    let sortData = (a: Data, b: Data) =>
      a[sortBy.orderBy].toLowerCase() < b[sortBy.orderBy].toLowerCase() ? -1 : 1;
    let sorted = data.sort(sortData);
    if (sortBy.direction === 'DESC') {
      sorted = sorted.reverse();
    }
    return sorted;
  }
);