[英]Create distinct object based on the date from input array in js
我有一个如下所示的“订单”数组:
[
[
['2022-07-10', 300],
['2022-07-8', 350],
['2022-07-9', 400],
['2022-07-8', 206],
['2022-07-10', 300],
],
[
['2022-07-7', 397],
['2022-07-9', 323],
['2022-07-8', 472],
['2022-07-7', 336],
['2022-07-10', 400],
],
];
最后我想要的是有一个包含不同日期的对象数组,并且总计是具有相同日期的元素的总和:
[
{date: '10/07/2022', total: 1000},
{date: '08/07/2022', total: 1028},
{date: '09/07/2022', total: 723},
...
];
这是我所做的,我想知道是否有更好/更短的方法来做到这一点:
groupOrdersByDate(orders: any[]) {
let res: any[] = [];
orders.forEach((ar) => {
ar.forEach((el: any) => {
console.log(res);
let dateOrder: string = new Date(el[0]).toLocaleDateString('fr');
let found = res.some((e) => e.date === dateOrder);
if (!found) {
res.push({ date: dateOrder, total: el[1] });
} else {
let existingObj = res.find((el) => el.date === dateOrder);
let indexx = res.findIndex((o) => {
return o.date === existingObj.date;
});
existingObj.total = existingObj.total + el[1];
res.splice(indexx, 1, existingObj);
}
});
});
}
我还想知道为什么我的 res 数组的注释 console.log 不为空? 即使我还没有向它推送任何元素,它也会显示值?
如果将结果存储在中间 object 中会更高效/更简洁,因此您不必为每个元素find
匹配项:
const orders = [ [ ['2022-07-10', 300], ['2022-07-8', 350], ['2022-07-9', 400], ['2022-07-8', 206], ['2022-07-10', 300], ], [ ['2022-07-7', 397], ['2022-07-9', 323], ['2022-07-8', 472], ['2022-07-7', 336], ['2022-07-10', 400], ], ]; const _sum = {} orders.forEach(arr => { arr.forEach(([date, quantity]) => { let dateOrder = new Date(date).toLocaleDateString('fr'); _sum[dateOrder] = (_sum[dateOrder]?? 0) + quantity; }) }) let results = Object.entries(_sum).map(([date, total]) => ({date, total})) console.log(results)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.