Реализуйте на JavaScript получение данных из endpoint’ов: параллельно загрузите посты и комментарии, сгруппируйте комментарии по postId и сформируйте массив объектов с id, title, userId и количеством комментариев.

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Предполагается, что endpoints возвращают JSON-массивы с указанными полями:

async function loadPosts(postsUrl, commentsUrl) {
  async function load(url) {
    const response = await fetch(url);
    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    return response.json();
  }
  const [posts, comments] = await Promise.all([load(postsUrl), load(commentsUrl)]);
  const counts = new Map();
  for (const { postId } of comments) counts.set(postId, (counts.get(postId) ?? 0) + 1);
  return posts.map(({ id, title, userId }) => ({
    id, title, userId, commentsCount: counts.get(id) ?? 0
  }));
}

В production проверьте схему и согласованность типов ID. Алгоритм O(P+C), без вложенного поиска комментариев для каждого поста.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее