按员工/员工组分组任务的JavaScript实现问题求助
目标
将任务按被分配的单个员工/员工组进行分组。
数据背景
- 每个任务可分配给多名员工
- 每名员工可拥有多个任务
- 员工的
type或name仅为附加数据,employee_id是唯一标识
现有问题
当前仅能按单个员工分组任务,若任务被多名员工共享,会在多个员工分组中重复出现(如示例中的任务在employee_id为111和999的分组中重复)。
{ "task_employee_id": 10001, "task_name": "Maintenance", "task_url": "www.task_url10001.com", "status": "incomplete" }, { "task_employee_id": 20002, "task_name": "Cleaning", "task_url": "www.task_url20002.com", "status": "completed" },
期望结果
需实现如下效果:
groupTasks: [ { "employee_id": [999,111], "type": "ABC", "name": "Lorem", "tasks": [ { "task_employee_id": 10001, "task_name": "Maintenance", "task_url": "www.task_url10001.com", "status": "incomplete" }, { "task_employee_id": 20002, "task_name": "Cleaning", "task_url": "www.task_url20002.com", "status": "completed" } ] }, { "employee_id": 111, "type": "ZHG", "name": "Ipsum", "tasks": [ { "task_employee_id": 30003, "task_name": "Fixing", "task_url": "www.task_url30003.com", "status": "incomplete" } ] }, { "employee_id": 999, "type": "ABC", "name": "Lorem", "tasks": [ { "task_employee_id": 40004, "task_name": "Checking", "task_url": "www.task_url40004.com", "status": "complete" } ] } ]
补充说明:employee_id字段格式可为"employee_ids": [{"employee_id" :999},{"employee_id" : 111}]或"employee_id": [999,111]
初始数据及当前代码
const data = [ { task_id: 10001, task_name: "Maintenance", task_url: "www.task_url10001.com", status: "incomplete", employees: [ { employee_id: 999, type: "ABC", name: "Lorem" }, { employee_id: 111, type: "ZHG", name: "Ipsum" } ] }, { task_id: 20002, task_name: "Cleaning", task_url: "www.task_url20002.com", status: "completed", employees: [ { employee_id: 111, type: "ZHG", name: "Ipsum" }, { employee_id: 999, type: "ABC", name: "Lorem" } ] }, { task_id: 30003, task_name: "Fixing", task_url: "www.task_url30003.com", status: "incomplete", employees: [{ employee_id: 111, type: "ZHG", name: "Ipsum" }] }, { task_id: 40004, task_name: "Checking", task_url: "www.task_url40004.com", status: "complete", employees: [{ employee_id: 999, type: "ABC", name: "Lorem" }] } ]; // current approach const groupTasks = [ ...data .reduce( ( groupTasksEmployees, { task_id: task_employee_id, task_name, task_url, status, employees = [] } ) => { employees.forEach(({ employee_id, type, name }) => { const employees = groupTasksEmployees.get(employee_id) ?? { employee_id, type, name, tasks: [] }; employees.tasks.push({ task_employee_id, task_name, task_url, status }); groupTasksEmployees.set(employee_id, employees); }); return groupTasksEmployees; }, new Map() ) .values() ]; console.log("groupTasks: ", groupTasks);
内容的提问来源于stack exchange,提问作者user1128912
相关产品推荐
相关产品推荐

