Пользователей индексируют по 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; её можно согласовать иначе.