我正在使用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”或“部门”对数据进行分组,然后应用过滤器并添加分组数据的计数。
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工作。我看到的大多数示例都不使用管道运算符。这引发错误'类型'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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句