Javascript 将多个对象减少为一个,将值添加到一起

Javascript 将多个对象减少为一个,将值添加到一起,javascript,arrays,object,Javascript,Arrays,Object,假设我有一个对象数组: [ { category: 'Category A', mainUnits: 5, subUnits: 3 }, { category: 'Category A', mainUnits: 9, subUnits, 12 }, { category: 'Category B', mainUnits: 4,

假设我有一个对象数组:

[
    {
        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
    }
]

我已经取得了一些进展,但还不能达到我所需要的确切结果。非常感谢您的指导,谢谢

使用
.reduce
数组方法似乎很适合这里

使用array
.find
方法查看结果中是否已经存在具有该类别的项。如果是,则添加字段,如果不是,则将项目添加到结果中:

const输入=[{
类别:“A类”,
主要单位:5,,
亚单位:3
}, {
类别:“A类”,
主要单位:9,,
亚单位:12,
}, {
类别:“B类”,
主要单位:4,,
亚单位:6,
}, {
类别:“B类”,
主要单位:2,,
亚单位:4,
}];
const result=input.reduce((结果,项目)=>{
const existing=result.find(x=>x.category==item.category);
如果(现有){
现有.mainUnits+=项目.mainUnits;
现有的.subUnits+=项.subUnits;
}否则{
结果:推送(项目);
}
返回结果;
}, []);

控制台日志(结果)@CRice的答案很好,但如果您愿意,这里有另一种方法:

const输入=[{
类别:“A类”,
主要单位:5,,
亚单位:3
}, {
类别:“A类”,
主要单位:9,,
亚单位:12
}, {
类别:“B类”,
主要单位:4,,
亚单位:6
}, {
类别:“B类”,
主要单位:2,,
亚单位:4
}];
设和={};
for(让输入输入){
总和[条目.类别]=总和[条目.类别]|{
主要单位:0,
亚单位:0
};
总和[entry.category].mainUnits+=entry.mainUnits;
求和[entry.category]。子单元+=entry.subUnits;
}
const result=Object.keys(sums).map(category=>Object.assign({
类别
},总和[类别]);

控制台日志(结果)您需要这样一个函数:

[
    {
        category: 'Category A',
        mainUnits: 14,
        subUnits: 15
    },

    {
        category: 'Category B',
        mainUnits: 6,
        subUnits: 10
    }
]
函数catTotals(catsArray){
变量cats=[],总计=[];

对于(var i=0,ca,c,o,x,l=catsArray.length;我非常感谢你!!我正朝着这个方向努力,我想我把它复杂化了,因为这很简单,而且我的版本非常复杂,缺少了主要逻辑。非常感谢!!我也有同样的问题,但在我的例子中,输入中的每一项都有一个id和其他我希望在将来忽略的唯一数据最终结果。我的输出结果是每个“类别”只有第一个实例。