"use strict"; /** * Высчитывает количество задач по каждому статусу для каждого проекта. * * @param projects {Array} * @param statuses {Array} * @param tasks {Array} * * @returns {Array} */ function getReport(projects, statuses, tasks) { return projects.map(function (project) { return statuses.reduce(function (carry, status) { carry[status.title] = tasks .filter(function (task) { return task.project_id === project.id && task.status_id === status.id; }) .length; return carry; }, {title: project.title}); }); } var validResult = [ { "title": "Canape CRM", "Площадка разворачивается": 0, "Площадка обновляется": 13, "Выполняется резервное копирование": 2, "ОК": 0, "Ошибка": 1 }, { "title": "Мастер", "Площадка разворачивается": 1, "Площадка обновляется": 6, "Выполняется резервное копирование": 2, "ОК": 0, "Ошибка": 0 }, { "title": "Canape CMS", "Площадка разворачивается": 13, "Площадка обновляется": 23, "Выполняется резервное копирование": 12, "ОК": 2, "Ошибка": 5 } ]; var result = getReport( [ {"id": 2, "title": "Canape CRM"}, {"id": 3, "title": "Мастер"}, {"id": 1, "title": "Canape CMS"} ], [ {"id": 7, "title": "Площадка разворачивается"}, {"id": 1, "title": "Площадка обновляется"}, {"id": 2, "title": "Выполняется резервное копирование"}, {"id": 3, "title": "ОК"}, {"id": 6, "title": "Ошибка"} ], [{"project_id": 2, "status_id": 2}, {"project_id": 2, "status_id": 1}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 2}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 2}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 3, "status_id": 1}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 6}, {"project_id": 1, "status_id": 3}, {"project_id": 2, "status_id": 2}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 2}, {"project_id": 1, "status_id": 2}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 7}, {"project_id": 3, "status_id": 7}, {"project_id": 1, "status_id": 2}, {"project_id": 3, "status_id": 1}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 2}, {"project_id": 1, "status_id": 1}, {"project_id": 3, "status_id": 1}, {"project_id": 3, "status_id": 2}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 3, "status_id": 1}, {"project_id": 1, "status_id": 2}, {"project_id": 1, "status_id": 1}, {"project_id": 3, "status_id": 1}, {"project_id": 1, "status_id": 6}, {"project_id": 1, "status_id": 3}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 6}, {"project_id": 3, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 2}, {"project_id": 1, "status_id": 7}, {"project_id": 3, "status_id": 2}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 6}, {"project_id": 1, "status_id": 6}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 2}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 1}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 1}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 1}, {"project_id": 1, "status_id": 2}, {"project_id": 2, "status_id": 1}, {"project_id": 2, "status_id": 6}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 7}, {"project_id": 1, "status_id": 1}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 2}, {"project_id": 1, "status_id": 2}, {"project_id": 2, "status_id": 1}, {"project_id": 1, "status_id": 7}] ); console.log(validResult, result);