我们说我有一系列对象:
[
{
category: 'Category A',
mainUnits: 5,
subUnits: 3
},
{
category: 'Category A',
mainUnits: 9,
subUnits, 12
},
{
category: 'Category B',
mainUnits: 4,
subUnits, 6
},
{
category: 'Category B',
mainUnits: 2,
subUnits, 4
}
]
但是,我似乎无法得到一个如下所示的数组:
[
{
category: 'Category A',
mainUnits: 14,
subUnits: 15
},
{
category: 'Category B',
mainUnits: 6,
subUnits: 10
}
]
我已经取得了一些进展,但不能得到我需要的确切结果。非常感谢任何指导,谢谢!
答案 0 :(得分:7)
.reduce
数组方法似乎非常合适。
使用数组.find
方法查看结果中是否已存在具有该类别的项目。如果是,请添加字段,但如果不是,请将项目添加到结果中:
const input = [{
category: 'Category A',
mainUnits: 5,
subUnits: 3
}, {
category: 'Category A',
mainUnits: 9,
subUnits: 12,
}, {
category: 'Category B',
mainUnits: 4,
subUnits: 6,
}, {
category: 'Category B',
mainUnits: 2,
subUnits: 4,
}];
const result = input.reduce((result, item) => {
const existing = result.find(x => x.category === item.category);
if (existing) {
existing.mainUnits += item.mainUnits;
existing.subUnits += item.subUnits;
} else {
result.push(item);
}
return result;
}, []);
console.log(result);
答案 1 :(得分:5)
@ CRice的答案很棒,但如果你愿意,这是另一种方法:
const input = [{
category: 'Category A',
mainUnits: 5,
subUnits: 3
}, {
category: 'Category A',
mainUnits: 9,
subUnits: 12
}, {
category: 'Category B',
mainUnits: 4,
subUnits: 6
}, {
category: 'Category B',
mainUnits: 2,
subUnits: 4
}];
let sums = {};
for (let entry of input) {
sums[entry.category] = sums[entry.category] || {
mainUnits: 0,
subUnits: 0
};
sums[entry.category].mainUnits += entry.mainUnits;
sums[entry.category].subUnits += entry.subUnits;
}
const result = Object.keys(sums).map(category => Object.assign({
category
}, sums[category]));
console.log(result);
答案 2 :(得分:1)
你需要这样的功能:
function catTotals(catsArray){
var cats = [], totals = [];
for(var i=0,ca,c,o,x,l=catsArray.length; i<l; i++){
ca = catsArray[i]; c = ca.category; x = cats.indexOf(c);
if(x === -1){
cats.push(c); totals.push({category:c, mainUnits:ca.mainUnits, subUnits:ca.subUnits});
}
else{
o = totals[x]; o.mainUnits += ca.mainUnits; o.subUnits += ca.subUnits;
}
}
return totals;
}
var cats = [
{
category: 'Category A',
mainUnits: 5,
subUnits: 3
},
{
category: 'Category A',
mainUnits: 9,
subUnits: 12
},
{
category: 'Category B',
mainUnits: 4,
subUnits: 6
},
{
category: 'Category B',
mainUnits: 2,
subUnits: 4
}
]
console.log(catTotals(cats));
&#13;