Javascript 按属性的唯一值分组
我得到了一组对象(任务)。每个任务都有名为“category”和“duration”的属性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
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
}
.
.
.
]