我正在使用Angle 6应用程序。我有一个函数,它返回一个可观察对象数组的可观察对象,而后者又是数组的可观察对象。
结果可能看起来像这样:
[
[],
[],
[object, object],
[],
[object],
[],
[object, object, object],
[]
]
如您所见,它是一个数组数组,有些数组可能为空。
我想按如下所示列出页面上每个内部数组中的每个对象:
<div *ngFor="let watcher of InvitationService.getInvitations() | async">
<div *ngFor="let invitation of watcher">
{{ invitation | json }}
</div>
</div>
getInvitations()看起来像这样:
getInvitations() {
const groupedInvitations$: Observable<any>[] = [];
groups.forEach(group => {
const groupInvites$ = this._firestoreService.collection(`GroupInvitations/${group.groupID}/Invites`);
groupedInvitations$.push(groupInvites$);
});
Return Observable.combineLatest(groupedInvitations$);
}
我想做的是从CombineLatest(...)返回的结果中删除空数组,然后将其余部分展平为一个一维数组。
我知道可以通过遍历map(…)或flatMap(…)或类似的东西来做到这一点。但是我一直在尝试类似的事情,但是没有任何效果。
例如,我已经尝试过:
Return Observable.combineLatest(groupedInvitations$).pipe(
map(item => {
console.log(item);
});
);
但是没有任何内容记录到控制台。
如何展平数组并删除空数组?谢谢。
答案 0 :(得分:0)
如我所见,您可以在该行之前放置一个if条件 groupedInvitations $ .push(groupInvites $); 检查数组长度是否大于零(如果是),如果不是,则将其添加到返回的数组中
希望有帮助
答案 1 :(得分:0)
首先尝试使用filter
删除空数组,然后使用combineLatest
将所有数组放在一起。
combineLatest(
groupedInvitations$.pipe(
filter(item => item.length > 0)
)
).pipe(
tap(item => { // Should be an array of arrays
console.log(item);
});
);