我想使用 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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句