Javascript 按键对数组进行分组,然后求和总数
我正试图操纵一个数据数组,以便它按一个键分组,然后包含一个属性,该属性显示每个组的总数,以及所有组的总数,但是我遇到了麻烦 这是我开始使用的数据:Javascript 按键对数组进行分组,然后求和总数,javascript,Javascript,我正试图操纵一个数据数组,以便它按一个键分组,然后包含一个属性,该属性显示每个组的总数,以及所有组的总数,但是我遇到了麻烦 这是我开始使用的数据: [ {paren: 'abc', details: '', value: 100}, {paren: 'abc', details: '', value: 120}, {paren: 'vav', details: '', value: 400}, {paren: 'aol', details: '', value: 40},
[
{paren: 'abc', details: '', value: 100},
{paren: 'abc', details: '', value: 120},
{paren: 'vav', details: '', value: 400},
{paren: 'aol', details: '', value: 40},
{paren: 'ckk', details: '', value: 400},
{paren: 'vav', details: '', value: 20}
]
这就是我想要的结局。total是组内所有对象的值之和,grandTotal是组内所有对象的值之和
const groupings = {
grandTotal: 1080,
groupings: [
{
group: 'abc',
data: [
{paren: 'abc', details: '', value: 100},
{paren: 'abc', details: '', value: 120},
],
total: 220
},
{
group: 'vav',
data: [
{paren: 'vav', details: '', value: 400},
{paren: 'vav', details: '', value: 20}
],
total: 420
},
{
group: 'aol',
data: [
{paren: 'aol', details: '', value: 40},
],
total: 40
},
{
group: 'ckk',
data: [
{paren: 'ckk', details: '', value: 400},
],
total: 400
},
]
};
我一直在尝试使用reduce/map的组合来实现这一点,我已经非常接近了。我唯一没有弄明白的是如何有效地计算总数。这是我的代码:
const mapGroups = array.reduce((obj, item) => {
obj[item.paren] = obj[item.paren] || [];
obj[item.paren].push(item);
return obj;
}, {});
return Object.keys(mapGroups).map((key) => {
return {group: key, data: mapGroups[key]};
});
任何帮助都将不胜感激。传递一个对象,该对象包含您希望
减少的整个结构。然后可以在循环期间更新嵌套对象。这允许您将每个运行总计和总计相加
最后,您可以将groupings
对象替换为其值数组
const数组=[
{paren:'abc',详细信息:'',值:100},
{paren:'abc',详细信息:'',值:120},
{paren:'vav',详细信息:'',值:400},
{paren:'aol',详细信息:'',值:40},
{paren:'ckk',详细信息:'',值:400},
{paren:'vav',详细信息:'',值:20}
];
常量映射组=数组.reduce((对象,项)=>{
对象分组[item.paren]=对象分组[item.paren]|{
组:item.paren,
数据:[],
总数:0
};
对象分组[item.paren].data.push(item);
对象分组[item.paren].total+=item.value;
obj.grandTotal+=项目价值;
返回obj;
},{grandTotal:0,分组:{});
mapGroups.groupings=Object.values(mapGroups.groupings);
console.log(映射组)代码>