0

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

但是没有任何东西被记录到控制台。

如何展平阵列并删除空阵列?谢谢。

4

2 回答 2

1

尝试使用filterfirst 删除空数组并使用combineLatest将它们放在一起。

combineLatest(
    groupedInvitations$.pipe(
        filter(item => item.length > 0)
    )
).pipe(
    tap(item => { // Should be an array of arrays
        console.log(item);
    });
);
于 2019-02-15T22:38:51.513 回答
0

如我所见,您可以在此行之前放置一个 if 条件 groupedInvitations$.push(groupInvites$); 检查数组长度是否大于零,如果是,则将其添加到返回的数组中,如果不是,则转到下一个

希望有帮助

于 2019-02-15T19:16:35.257 回答