You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按员工/员工组分组任务的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:10:51