Sobes.tech
Middle

Jamoa a'zo bo'lish uchun jamoalar ro'yxatini chiqaradigan komponentni amalga oshiring. Jamoalar massivini (nomi va ishtirokchi foydalanuvchi IDlari ro'yxati bilan) va alohida foydalanuvchilar massivini (ID va nom bilan) qabul qiladi. Foydalanuvchi IDsi bo'yicha jamoalarni moslashtirish va jamoa kartlarini ishtirokchilar ro'yxati bilan chiqarish kerak. Agar ishtirokchilar bo'lmasa — 'ishtirokchilar yo'q' deb chiqarish; agar foydalanuvchi IDsi mavjud bo'lsa, lekin foydalanuvchi ro'yxatda topilmasa — chiziq chiqarish. Xususiyat: foydalanuvchi IDsi massiv, raqam, null yoki undefined bo'lishi mumkin.

sobes.tech AI

AIdan javob

Ниже пример реализации React-компонента, который принимает массив команд и пользователей, сопоставляет участников по ID и выводит карточки с участниками:

import React from 'react';

function TeamList({ teams, users }) {
  // Создаём словарь пользователей по ID для быстрого поиска
  const userMap = React.useMemo(() => {
    const map = new Map();
    users.forEach(user => {
      map.set(user.id, user.name);
    });
    return map;
  }, [users]);

  // Функция для получения списка имён участников команды
  const getParticipantNames = (userIds) => {
    if (!userIds) return ['нет участников'];

    // Приводим userIds к массиву
    let ids = [];
    if (Array.isArray(userIds)) {
      ids = userIds;
    } else if (typeof userIds === 'number') {
      ids = [userIds];
    } else {
      return ['нет участников'];
    }

    if (ids.length === 0) return ['нет участников'];

    return ids.map(id => {
      if (id === null || id === undefined) return '-';
      return userMap.has(id) ? userMap.get(id) : '-';
    });
  };

  return (
    <div>
      {teams.map(team => (
        <div key={team.name} style={{border: '1px solid #ccc', margin: '10px', padding: '10px'}}>
          <h3>{team.name}</h3>
          <ul>
            {getParticipantNames(team.userIds).map((name, idx) => (
              <li key={idx}>{name}</li>
            ))}
          </ul>
        </div>
      ))}
    </div>
  );
}

export default TeamList;

Объяснение:

  • Создаём карту пользователей для быстрого поиска имени по ID.
  • Обрабатываем userIds, учитывая, что это может быть массив, число, null или undefined.
  • Если участников нет, выводим "нет участников".
  • Если ID есть, но пользователя нет в списке — выводим "-".
  • Выводим карточки команд с перечислением участников.