Как мне сгладить массив и удалить пустые массивы из результатов combLatest (...)? - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю в угловых 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$);
}

Что я хотел бы сделать, это удалить пустые массивы из результатов, возвращаемых функциейlateLatest (…), и упростить остальные в один одномерный массив.

Я понимаю, что это можно сделать, пропустив карту (…), flatMap (…) или тому подобное.Но я пробовал такие вещи, и ничего не получалось.

Например, я пробовал это:

Return Observable.combineLatest(groupedInvitations$).pipe(
  map(item => {
    console.log(item);
  });
);

Но на консоль ничего не регистрируется.

Как я могу сгладить массив и удалить пустые массивы?Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Попробуйте сначала использовать filter, чтобы удалить пустые массивы, и combineLatest, чтобы собрать их все вместе.

combineLatest(
    groupedInvitations$.pipe(
        filter(item => item.length > 0)
    )
).pipe(
    tap(item => { // Should be an array of arrays
        console.log(item);
    });
);
0 голосов
/ 15 февраля 2019

как я понимаю, перед этой строкой можно поставить условие if groupedInvitations $ .push (groupInvites $);чтобы проверить, если длина массива больше нуля, если да, добавьте его в возвращаемый массив, если нет, перейдите к следующему

надеюсь, что это поможет

...