Sobes.tech
Middle

Rakenda komponentu, kas parāda komandu sarakstu ar dalībniekiem. Saņemta komandu masīvs (ar nosaukumu un dalībnieku lietotāju ID sarakstu) un atsevišķs lietotāju masīvs (ar ID un vārdu). Jāsaista komandas ar lietotājiem pēc ID un jāparāda komandu kartes ar dalībnieku sarakstu. Ja dalībnieki nav — rādīt 'nav dalībnieku'; ja ir user ID, bet lietotājs nav atrasts sarakstā — rādīt domuzīmi. Īpašība: user ID var būt masīvs, skaitlis, null vai undefined.

sobes.tech AI

Vastus AI-lt

Ниже пример реализации 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 есть, но пользователя нет в списке — выводим "-".
  • Выводим карточки команд с перечислением участников.