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);
我正在使用 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);