Angular 2 RxJS groupBy flatMap 为空
Angular 2 RxJS groupBy flatMap empty
我是 RXxJS 的新手,所以我可能看错了,但我有一个 returns 数组 'Verpleegperiodes':
的服务
export class Verpleegperiode{
verpleegperiodeId?: number;
beginDatumUur?: moment.Moment;
eindDatumUur?: moment.Moment;
bed: string;
kamer: string;
dienst: Dienst;
dossier: Dossier;
}
并且在我的组件中,我正在尝试获取按 'kamer' 属性 分组的 'Verpleegperiodes' 的数组,这是用于 ex。 '101', '102', '103', ...
所以我想要一个 Observable 流 for ex.:
[{verpleegperiodeId: 1, kamer: '101'},{verpleegperiodeId: 3, kamer: '101'}]
[{verpleegperiodeId: 6, kamer: '102'}]
或者更好,如果这可以用 RxJS:
{ kamer: '101', verpleegperiodes: [{verpleegperiodeId: 1, kamer: '101'},{verpleegperiodeId: 3, kamer: '101'}] }
{ kamer: '102', verpleegperiodes: [{verpleegperiodeId: 6, kamer: '102'}] }
为此,我找到了分组依据的文档:https://www.learnrxjs.io/operators/transformation/groupby.html
使用这个,我添加了这个代码(使用路由的 dienstId 参数)来生成这个:
this.activeVerpleegperiodes$ = this._route.params
.switchMap((params: Params) => this._infohosService.getActiveVerpleegperiodesByDienstId(params['dienstId']))
.flatMap(verpleegperiodes => verpleegperiodes)
.groupBy(vp => { console.log(vp.kamer); return vp.kamer; })
.flatMap(group => { return group.reduce((acc, curr) => { return [...acc, curr]; }, []); })
.map(f => { console.log(f); return f; } );
我添加了一些 console.log 来检查值。 groupBy 部分中的 console.log returns:
101
101
102
...
我已经在 reduce 函数中放置了一些 console.log 来记录 acc 和 curr 值,它们将正确的值分组到 1 个数组中。
但是,映射函数中的 console.log 从不记录。甚至不是 undefined 或 [].
在我的模板中,我也尝试打印流的异步值:
{{ activeVerpleegperiodes$ | async | json }}
这始终为空。
我怎样才能得到所需的结果?
如果 Verpleegperiodes
数组一次性到达,则不需要 RxJs。
RxJs 可帮助您随时间操纵值。
您可能对类似的东西感兴趣:(或 lodash,但 lodash 似乎仅此而已)。
我是 RXxJS 的新手,所以我可能看错了,但我有一个 returns 数组 'Verpleegperiodes':
的服务export class Verpleegperiode{
verpleegperiodeId?: number;
beginDatumUur?: moment.Moment;
eindDatumUur?: moment.Moment;
bed: string;
kamer: string;
dienst: Dienst;
dossier: Dossier;
}
并且在我的组件中,我正在尝试获取按 'kamer' 属性 分组的 'Verpleegperiodes' 的数组,这是用于 ex。 '101', '102', '103', ... 所以我想要一个 Observable 流 for ex.:
[{verpleegperiodeId: 1, kamer: '101'},{verpleegperiodeId: 3, kamer: '101'}]
[{verpleegperiodeId: 6, kamer: '102'}]
或者更好,如果这可以用 RxJS:
{ kamer: '101', verpleegperiodes: [{verpleegperiodeId: 1, kamer: '101'},{verpleegperiodeId: 3, kamer: '101'}] }
{ kamer: '102', verpleegperiodes: [{verpleegperiodeId: 6, kamer: '102'}] }
为此,我找到了分组依据的文档:https://www.learnrxjs.io/operators/transformation/groupby.html
使用这个,我添加了这个代码(使用路由的 dienstId 参数)来生成这个:
this.activeVerpleegperiodes$ = this._route.params
.switchMap((params: Params) => this._infohosService.getActiveVerpleegperiodesByDienstId(params['dienstId']))
.flatMap(verpleegperiodes => verpleegperiodes)
.groupBy(vp => { console.log(vp.kamer); return vp.kamer; })
.flatMap(group => { return group.reduce((acc, curr) => { return [...acc, curr]; }, []); })
.map(f => { console.log(f); return f; } );
我添加了一些 console.log 来检查值。 groupBy 部分中的 console.log returns:
101
101
102
...
我已经在 reduce 函数中放置了一些 console.log 来记录 acc 和 curr 值,它们将正确的值分组到 1 个数组中。 但是,映射函数中的 console.log 从不记录。甚至不是 undefined 或 [].
在我的模板中,我也尝试打印流的异步值:
{{ activeVerpleegperiodes$ | async | json }}
这始终为空。
我怎样才能得到所需的结果?
如果 Verpleegperiodes
数组一次性到达,则不需要 RxJs。
RxJs 可帮助您随时间操纵值。
您可能对类似的东西感兴趣:(或 lodash,但 lodash 似乎仅此而已)。