Параллельно получите оба массива, постройте счётчик комментариев по postId и преобразуйте посты за один проход.
Реализуйте на JavaScript получение данных из endpoint’ов: параллельно загрузите посты и комментарии, сгруппируйте комментарии по postId и сформируйте массив объектов с id, title, userId и количеством комментариев.
Параллельно получите оба массива, постройте счётчик комментариев по 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), без вложенного поиска комментариев для каждого поста.