Angular RxJS groupBy对可观测自定义阵列的ngrx效果

Angular RxJS groupBy对可观测自定义阵列的ngrx效果,angular,rxjs,ngrx,rxjs6,ngrx-effects,Angular,Rxjs,Ngrx,Rxjs6,Ngrx Effects,我正在使用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: dep

我正在使用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);
this.projects$:Observable=this.\u store.select(state=>state.projects.allProjects)
.map((项目:Project[])=>项目);
此.projects$.pipe(
群比(
project=>project.id)
).subscribe(console.log);

我无法使groupBy和mergeMap正常工作。我看到的大多数示例都没有使用管道操作符。这引发了错误“Project[]”类型上不存在属性“id”。

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

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);
}
记录的控制台将是一个仅包含department==“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);

预期的输出是什么样子的?像您的“结果:”?这有一些使用管道的更好示例:。看起来你的语法不太正确。我正要写这段准确的代码^^我个人一直希望
管道中每个操作符有一行,但格式是我唯一要更改的。我需要在筛选后根据“id”应用groupBy。