Как фильтровать внутри фильтра в react

#reactjs #for-loop #filter

Вопрос:

Я пытаюсь отфильтровать массив, который показывает мне список пользователей, у которых еще нет команды, а другой-у них есть команда, но не конкретный идентификатор команды, который я передал.

Так что пример, когда я console.log(invitees) :

 0:
Memberships: Array(1)
0: {teamId: "5413e75f-ff12-4b7a-a3fe-f892cd006366"}
length: 1
__proto__: Array(0)
Ratings: []
Skills: []
fullname: "Nhan Nguyen"

1:
Memberships: Array(0)
length: 0
__proto__: Array(0)
Ratings: []
Skills: [{…}]
fullname: "nick nick"

2:
Memberships: Array(2)
0: {teamId: "4d45c102-0624-4467-ad11-5fa5eaadcf7e"}
1: {teamId: "5413e75f-ff12-4b7a-a3fe-f892cd006366"}
length: 2
__proto__: Array(0)
Ratings: []
Skills: []
fullname: "Nhan Nguyen"
 

Итак, прямо сейчас я нахожусь в TeamID 4d4... , и когда я пытаюсь искать пользователей, которых еще нет в команде, или пользователей, которые уже в команде, но не в команде с идентификатором 4d4...

Как я могу пройти через это?

Вот мой следующий код:

 {invitees
  .filter(
    (userTeamId) =>
      userTeamId.Memberships.length < 1 ||
      userTeamId.Memberships.filter((member) =>
        member.temaId !== privateTeamId
      )
  )
  .map((user, index) => (
    <Grid item key={index}>
      <InviteCard tab={tab} user={user} />
    </Grid>
  ))}
 

Ответ №1:

filter Функция в массиве ожидает, что переданная функция предиката вернет результат true или false, а filter затем вызов возвращает массив с отфильтрованными значениями.

Внутреннее filter на самом деле не то, чего вы хотите достичь, так как вам нужно возвращать логическое значение, а не массив. Вы хотите просто определить, не совпадает ли каждое значение в списке участников с вашим личным идентификатором команды. Для этого вы можете использовать every функцию в массиве:

 {invitees
  .filter(
    (userTeamId) =>
      userTeamId.Memberships.length < 1 ||
      userTeamId.Memberships.every((member) =>
        member.teamId !== privateTeamId
      )
  )
  .map((user, index) => (
    <Grid item key={index}>
      <InviteCard tab={tab} user={user} />
    </Grid>
  ))}