// Пример получаемых данных:

Пользователей индексируют по id, комментарии считают по postId, затем обогащают каждый пост именем автора и количеством комментариев.

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

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

Пользователей индексируют по id, комментарии считают по postId, затем обогащают каждый пост именем автора и количеством комментариев.

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

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

Условие

// Пример получаемых данных: // Комменты [{ "postId": 1, "id": 1, "name": "id labore ex et quam laborum", "email": "[email]", "body": "laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium" }]

// Пример получаемых данных: // Пользователи [{ "id": 1, "name": "Leanne Graham", "username": "Bret", "email": "[email]", "phone": "[phone]" }]

// Выходной формат данных (посты): [{ "id": 1, // id поста "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", // title поста "userName": "Leanne Graham", "commentsCount": 10, }]

Ответ

Пользователей индексируют по id, комментарии считают по postId, затем обогащают каждый пост именем автора и количеством комментариев.

Предположим, posts содержит id, title и userId, а три массива уже загружены:

function enrichPosts(posts, users, comments) {
  const names = new Map(users.map(u => [u.id, u.name]));
  const counts = new Map();
  for (const c of comments) {
    counts.set(c.postId, (counts.get(c.postId) ?? 0) + 1);
  }
  return posts.map(p => ({
    id: p.id,
    title: p.title,
    userName: names.get(p.userId) ?? null,
    commentsCount: counts.get(p.id) ?? 0
  }));
}

Сложность O(P + U + C). Политика для отсутствующего автора здесь явно задана как null; её можно согласовать иначе.

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

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

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

Подробнее