#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>
))}