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,我的错。刚刚修复了错误并更新了答案。现在应该可以用了。