在数组中按对象分组最有效的方法是什么
例如,给定此对象数组:
[
{阶段:“阶段1”,步骤:“步骤1”,任务:“任务1”,值:“5”},
{阶段:“阶段1”,步骤:“步骤1”,任务:“任务2”,值:“10”},
{阶段:“阶段1”,步骤:“步骤2”,任务:“任务1”,值:“15”},
{阶段:“阶段1”,步骤:“步骤2”,任务:“任务2”,值:“20”},
{阶段:“阶段2”,步骤:“步骤1”,任务:“任务1”,值:“25”},
{阶段:“阶段2”,步骤:“步骤1”,任务:“任务2”,值:“30”},
{阶段:“阶段2”,步骤:“步骤2”,任务:“任务1”,值:“35”},
{阶段:“阶段2”,步骤:“步骤2”,任务:“任务2”,值:“40”}
]
我正在表格中显示此信息。我想按不同的方法分组,但我想求和这些值
我正在使用underline.js作为它的groupby函数,这很有帮助,但并不是全部,因为我不希望它们“分开”而是“合并”,更像SQLgroupby方法
我要寻找的是能够计算特定值的总和(如果需要的话)
因此,如果我在groupby阶段,我希望收到:
[
{阶段:“阶段1”,值:50},
{阶段:“阶段2”,值:130}
]
如果我做了groupy阶段/步骤,我会收到:
[
{阶段:“阶段1”,步骤:“步骤1”,值:15},
{阶段:“阶段1”,步骤:“步骤2”,值:35},
{阶段:“阶段2”,步骤:“步骤1”,值:55},
{阶段:“阶段2”,步骤:“步骤2”,值:75}
]
是否有一个对此有用的脚本,或者我应该坚持使用underline.js,然后在生成的对象中循环以自己进行合计
如果希望避免使用外部库,可以简洁地实现groupBy()的普通版本,如下所示:
var groupBy=function(xs,key){
返回x.reduce(功能(rv,x){
(rv[x[键]]=rv[x[键]| |[])。按(x);
返回rv;
}, {});
};
log(groupBy(['one','two','three'],'length');
//=>;{3:[“一”、“二”],5:[“三”}