我想使用 lodash javscript 对数据进行分组。首先我尝试使用 groupBy machine_id 然后对总值进行求和
这是我的数据
const data = [
{
id: 1,
machine_id: 1,
work_id: 1,
total: 10
},
{
id: 2,
machine_id: 1,
work_id: 2,
total: 15
},
{
id: 3,
machine_id: 2,
work_id: 3,
total: 10
},
{
id: 4,
machine_id: 1,
work_id: 1,
total: 15
},
]
我想对 machine_id 进行分组,然后我想按 machine_id 求和,然后我想对每个 work_id 求和
我想这样输出
[
{
"machine_id": 1,
"sum_total": 25
"work_group": [
// In this work group I want to sum total each work_id
{
work_id: 1
sum_total: 25
},
{
work_id: 2
sum_total: 15
}
]
},
{
"machine_id": 2,
"sum_total": 10
"work_group": [
{
work_id: 3
sum_total: 10
}
]
},
]
这就是我的尝试
let groupData = _(data)
.groupBy("machine_id")
.map((data, machine_id) => ({
machine_id,
sum_total: _.sumBy(data, item => Number(item.total_time))
}))
.value();
我的输出如下所示:
[
{
"machine_id": 1,
"sum_total": 25
},
{
"machine_id": 2,
"sum_total": 10
},
]
如何按 work_id 深入了解总和
最佳答案
用户reduce
和Object.values
将简化
const data = [
{
id: 1,
machine_id: 1,
work_id: 1,
total: 10
},
{
id: 2,
machine_id: 1,
work_id: 2,
total: 15
},
{
id: 3,
machine_id: 2,
work_id: 3,
total: 10
},
{
id: 4,
machine_id: 1,
work_id: 1,
total: 15
}
];
const updated = Object.values(
data.reduce((acc, curr) => {
if (curr.machine_id in acc) {
const work_group = [
...acc[curr.machine_id].work_group,
{ work_id: curr.work_id, sum_total: curr.total }
].reduce((wg_acc, wg_curr) => {
wg_acc[wg_curr.work_id] =
wg_curr.work_id in wg_acc
? {
...wg_acc[wg_curr.work_id],
sum_total: wg_acc[wg_curr.work_id].sum_total + wg_curr.sum_total
}
: { ...wg_curr };
return wg_acc;
}, {});
acc[curr.machine_id] = {
...acc[curr.machine_id],
sum_total: acc[curr.machine_id].sum_total + curr.total,
work_group: Object.values(work_group)
};
} else {
acc[curr.machine_id] = {
machine_id: curr.machine_id,
sum_total: curr.total,
work_group: [{ work_id: curr.work_id, sum_total: curr.total }]
};
}
return acc;
}, {})
);
console.log(updated);
关于javascript - 如何使用 lodash javascript 对对象中的数组数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60162197/