RxJS groupBy通过ngrx效果可观察到的自定义数组

武士

我正在使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章