Javascript npm linq:对多个列进行分组
我试图在一个对象数组中按2列分组,并得到一个值的分组总和。我一直在使用linq,代码如下:Javascript npm linq:对多个列进行分组,javascript,grouping,linq.js,Javascript,Grouping,Linq.js,我试图在一个对象数组中按2列分组,并得到一个值的分组总和。我一直在使用linq,代码如下: import Enumerate from "linq"; let data = [ { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" }, { Phase: "Phase 1", Step:
import Enumerate from "linq";
let data = [
{ Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
{ Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" },
{ Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" },
{ Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" },
{ Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" },
{ Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" },
{ Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" },
{ Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" }
];
var result = Enumerate.from(data)
.groupBy((x) => x.Phase + ':'+ x.Task)
.select((x) => {
return {
Phase: x.first().Phase,
Task: x.first().Task,
Value: x.sum((y)=> y.Value | 0)
};
})
.toArray();
console.log (result);
我得到了预期的结果:
Array(4)[
0: Object { Phase: "Phase 1" ,Task: "Task 1" ,Value: 20 }
1: Object { Phase: "Phase 1" ,Task: "Task 2" ,Value: 30 }
2: Object { Phase: "Phase 2" ,Task: "Task 1" ,Value: 60 }
3: Object { Phase: "Phase 2" ,Task: "Task 2" ,Value: 70 }
length: 4
]
我费了一点劲才得出这个结果,在选择数据时,我不得不使用一些变通方法,比如groupBy中的字符串键和x.first()。我的问题是,这是正确的方法吗?还是我遗漏了什么?我对linq.js没有经验,但我会根据我的C#经验和从文档中收集到的信息给出一些见解 您可以为
groupBy
函数提供额外的参数,使其更加优雅。理由如下:
var result = Enumerate.from(data)
.groupBy((x) => ({Phase: x.Phase, Task: x.Task}),
(x) => x.Value | 0,
(key, values) => ({
Phase: key.Phase,
Task: key.Task,
Value: values.sum()
}),
(key) => key.Phase + ':'+ key.Task)
)
.toArray();
非常好,谢谢,只需要在选择器中添加一个额外的父项。x=>({Phase:x.Phase,Task:x.Task}),