【发布时间】:2021-01-21 16:35:43
【问题描述】:
{ Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5", Status: "Done", Month: "May" },
{ Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10", Status: "Started", Month: "May" },
{ Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15", Status: "Done", Month: "June" },
{ Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20", Status: "Started", Month: "Aug" },
{ Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25", Status: "Done", Month: "Apr" },
{ Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30", Status: "NotStarted", Month: "May" },
{ Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35", Status: "Done", Month: "Oct" },
{ Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40", Status: "NotStarted", Month: "Dec" }
我需要从上面的 JSon 中获取总价值,根据 2 个字段分组。这些字段可以是动态的。例如,该组可以 Phase 和 Step 输出应该是这样的
{ Phase: "Phase 1", Step: "Step 1", Task: "Task 1, Task 2", Value: "15" },
{ Phase: "Phase 1", Step: "Step 2", Task: "Task 1, Task 2", Value: "35" },
{ Phase: "Phase 2", Step: "Step 1", Task: "Task 1, Task 2", Value: "55" },
{ Phase: "Phase 2", Step: "Step 2", Task: "Task 1, Task 2", Value: "75" }
或者分组依据可以是阶段和状态
我使用以下代码按阶段和步骤分组。 但我希望按参数分组是动态的并在运行时决定
result = Object.values(
data.reduce((r, o) => {
const key = `${o.Phase}_${o.Step}`;
r[key] = r[key] || { Phase: o.Phase, Step: o.Step, Task: [], Value: 0 };
r[key].Task.push(o.Task);
r[key].Value += +o.Value;
return r;
}, {})
).map((o) => ({ ...o, Task: o.Task.join(",") }));
【问题讨论】:
标签: javascript