如何展平数组并从CombineLatest(...)的结果中删除空数组?

时间:2019-02-15 19:01:48

标签: arrays angular typescript flatten combinelatest

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

但是没有任何内容记录到控制台。

如何展平数组并删除空数组?谢谢。

2 个答案:

答案 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);
    });
);