Javascript 如何使用Lodash按多个键分组并在对象数组中求和其值?

Javascript 如何使用Lodash按多个键分组并在对象数组中求和其值?,javascript,lodash,javascript-objects,Javascript,Lodash,Javascript Objects,在下面的数组中,我想按项目和原因进行分组,然后计算总的数量: 项目移动=[ { 项目:“苹果”, 理由:一,, 数量:5 }, { 项目:“香蕉”, 理由:二,, 数量:10 }, { 项目:“苹果”, 理由:一,, 数量:5 }, { 项目:“香蕉”, 理由:一,, 数量:8 }, { 项目:“苹果”, 理由:二,, 数量:3 }, { 项目:“香蕉”, 理由:一,, 数量:8 } ]; 我试图实现的结果是: item_总计=[ { 项目:“苹果”, 1: 10, 2: 3 }, { 项目:

在下面的数组中,我想按
项目
原因
进行分组,然后计算总的
数量

项目移动=[
{
项目:“苹果”,
理由:一,,
数量:5
},
{
项目:“香蕉”,
理由:二,,
数量:10
},
{
项目:“苹果”,
理由:一,,
数量:5
},
{
项目:“香蕉”,
理由:一,,
数量:8
},
{
项目:“苹果”,
理由:二,,
数量:3
},
{
项目:“香蕉”,
理由:一,,
数量:8
}
];
我试图实现的结果是:

item_总计=[
{
项目:“苹果”,
1: 10,
2: 3
},
{
项目:“香蕉”,
1: 16,
2: 10
}
];
我可以使用Loadash按
项目进行分组,如下所示:

({
itemMovementbyItem(){
var结果=u(此.item_u移动)
.groupBy(x=>x.item)
.map((值、键)=>({
项目:关键,
项目:价值
}))
.value()
返回结果
}
})

但是我在第二次按
原因分组时遇到了问题

您可以在按
'item'
分组后直接对属性求和

function itemMovementbyItem(数组){
返回(数组)
.groupBy('项目')
.map(组=>({
项:组[0]。项,
1:u.sumBy(组,o=>o.reason==1?o.quantity:0),
2:u.sumBy(组,o=>o.reason==2?o.quantity:0)
}))
.value();
}
var item_movements=[{item:“苹果”,原因:1,数量:5},{item:“香蕉”,原因:2,数量:10},{item:“苹果”,原因:1,数量:5},{item:“香蕉”,原因:1,数量:8},{item:“苹果”,原因:2,数量:3},{item:“香蕉”,原因:1,数量:8}];
console.log(itemMovementbyItem(item_移动))
。作为控制台包装{最大高度:100%!重要;顶部:0;}

使用
reduce
构建一个对象,其中键作为项。从对象获取
对象。值

const item\u移动=[
{
项目:“苹果”,
理由:一,,
数量:5
},
{
项目:“香蕉”,
理由:二,,
数量:10
},
{
项目:“苹果”,
理由:一,,
数量:5
},
{
项目:“香蕉”,
理由:一,,
数量:8
},
{
项目:“苹果”,
理由:二,,
数量:3
},
{
项目:“香蕉”,
理由:一,,
数量:8
}
];
const all=item_movements.reduce((acc,{item,reason,quantity})=>{
行政协调会[项目]=
acc中的项目
? {
…附件[项目],
[原因]:(附件[项目][原因]| | 0)+数量
}
:{项目[原因]:数量};
返回acc;
}, {});
const item_totals=对象值(全部);

控制台日志(项目总数)@Catmal,我的错。刚刚修复了错误并更新了答案。现在应该可以用了。