RxJS groupBy on ngrx 对可观察的自定义数组的影响

RxJS groupBy on ngrx effects to observable custom array

我正在使用 ngrx 效果从 API 中获取数据。我尝试了不同的 rxjs 运算符组合来实现这一点。目前正在使用 groupBy 运算符来实现以下

API数据:

projects = [{id: 1, name: project1, department: dept1, instance_count: 3},
{id: 2, name: project2, department: dept2, instance_count: 6},
{id: 3, name: project3, department: dept1, instance_count: 1},
{id: 1, name: project1, department: dept1, instance_count: 8}]

我可以选择根据部门进行筛选。所以选择'dept1'时的输出应该是

结果:

filteredProjects = [{id: 1, name: project1, department: dept1,   instance_count: 11 }, {id: 3, name: project3, department: dept1, instance_count: 1}] 

我尝试使用 groupBy 根据 'id' 或 'department' 对数据进行分组,然后应用过滤器并添加分组数据的计数。

this.projects$: Observable<Project[]> = this._store.select(state => state.projects.allProjects)
  .map((projects: Project[]) => projects);

this.projects$.pipe(
groupBy(
project => project.id)
   ).subscribe(console.log);

我无法使 groupBy 和 mergeMap 正常工作。我看到的大多数示例都不使用管道运算符。这是抛出错误' 属性 'id' 在类型 'Project[]' 上不存在。

如果我正确理解了您想要的输出,您可以应用此代码段的部分内容来获得您想要的内容:

test = [{id: 1, name: 'project1', department: 'dept1', instance_count: 3},
{id: 2, name: 'project2', department: 'dept2', instance_count: 6},
{id: 3, name: 'project3', department: 'dept1', instance_count: 1},
{id: 1, name: 'project1', department: 'dept1', instance_count: 8}];

constructor() {
    from(this.test).pipe(filter(a => a['department'] == 'dept1'), toArray()).subscribe(console.log);
}

记录的控制台将是一个数组,仅包含部门 == 'dept1'

的条目

EDIT1:(回答问题:过滤后需要根据id申请groupBy)

使用此代码段将为您提供两个分组结果数组:

from(this.test).pipe(filter(a => a['department'] == 'dept1'), groupBy(a => a.id), mergeMap(a => a.pipe(toArray()))).subscribe(console.log);