Javascript 按属性的唯一值分组

Javascript 按属性的唯一值分组,javascript,arrays,Javascript,Arrays,我得到了一组对象(任务)。每个任务都有名为“category”和“duration”的属性 var tasks = [ { _id : "123", category : "someCategory", duration: "3432" }, { _id : "113", category : "someCategory", duration: "23" }, { _id : "124", category : "someCategory 2", duration: "1343

我得到了一组对象(任务)。每个任务都有名为“category”和“duration”的属性

var tasks = [
{
 _id : "123",
 category : "someCategory",
 duration: "3432"
},
{
 _id : "113",
 category : "someCategory",
 duration: "23"
},
{
 _id : "124",
 category : "someCategory 2",
 duration: "1343"
},

{
 _id : "2124",
 category : "someCategory 2",
 duration: "1343"
},

{
 _id : "7124",
 category : "someCategory 5",
 duration: "53"
},

{
 _id : "34",
 category : "someCategory",
 duration: "753"
}
]
我想按类别(唯一)和每个类别的总持续时间对任务进行分组

结果应该是:

 var categories = ["someCategory", "someCategory 2" ... ]
    var duration = [ <summary duration of "someCategory">, <summary duration of "someCategory 2">, ... ]
然后我创建{key:value}数组并按键求和,即

[
    {
     someCategory : 3432
    },
   {
     someCategory : 23
    }
.
.
.
]
最终我实现了我的目标,但代码看起来很凌乱,根本不可读。。。
在Javascript中有更好的方法吗?

您可以只返回一个带有
类别的对象:duration

var tasks=[{u id:“123”,“category:“someCategory”,“duration:“3432”},{u id:“113”,“category:“someCategory”,“duration:“23”},{u id:“124”,“category:“someCategory 2”,“duration:“2124”,“category:“somecategegegegory:“1343”},{u id:“7124”,“categegegory:“somecategegegegegegory:“5”,“duration:“53”},{,“持续时间”:“753”}]
var result=tasks.reduce(函数(r,e){
r[e.category]=(r[e.category]| | 0)++e.duration
返回r;
}, {})

console.log(result)
您只需返回一个对象,其中包含
类别:duration

var tasks=[{u id:“123”,“category:“someCategory”,“duration:“3432”},{u id:“113”,“category:“someCategory”,“duration:“23”},{u id:“124”,“category:“someCategory 2”,“duration:“2124”,“category:“somecategegegegory:“1343”},{u id:“7124”,“categegegory:“somecategegegegegegory:“5”,“duration:“53”},{,“持续时间”:“753”}]
var result=tasks.reduce(函数(r,e){
r[e.category]=(r[e.category]| | 0)++e.duration
返回r;
}, {})
console.log(结果)
var tasks=[{u id:“123”,“category:“someCategory”,“duration:“3432”},{u id:“113”,“category:“someCategory”,“duration:“23”},{u id:“124”,“category:“someCategory 2”,“duration:“2124”,“category:“somecategegegegory:“1343”},{u id:“7124”,“categegegory:“somecategegegegegegory:“5”,“duration:“53”},{,“持续时间”:“753”}]
var-arr=[];
tasks.forEach(v=>arr.push(v.category));
var newArr=[…新集合(arr)];
var arr2=[];
newArr.forEach(函数(v){
var obj={};
对象类别=v;
obj.duration=0;
arr2.推力(obj);
});
arr2.forEach(v=>tasks.forEach(c=>c.category==v.category?v.duration+=parseInt(c.duration):v));
控制台日志(arr2)
var tasks=[{u id:“123”,“category:“someCategory”,“duration:“3432”},{u id:“113”,“category:“someCategory”,“duration:“23”},{u id:“124”,“category:“someCategory 2”,“duration:“2124”,“category:“somecategegegegory:“1343”},{u id:“7124”,“categegegory:“somecategegegegegegory:“5”,“duration:“53”},{,“持续时间”:“753”}]
var-arr=[];
tasks.forEach(v=>arr.push(v.category));
var newArr=[…新集合(arr)];
var arr2=[];
newArr.forEach(函数(v){
var obj={};
对象类别=v;
obj.duration=0;
arr2.推力(obj);
});
arr2.forEach(v=>tasks.forEach(c=>c.category==v.category?v.duration+=parseInt(c.duration):v));
控制台日志(arr2)
[
    {
     someCategory : 3432
    },
   {
     someCategory : 23
    }
.
.
.
]