gpt4 book ai didi

javascript - 遍历对象并添加日期范围内的所有值

转载 作者:行者123 更新时间:2023-12-03 23:28:02 25 4
gpt4 key购买 nike

我有一个查询正在获取用户过去 7 天的值。这些条目可能是 (2) 个,也可能是 (20) 个,重要的是计算和添加每个日期的值。

这是数据:

[ { calories: '1170.00', upload_date: 2019-12-31T21:41:42.943Z },
{ calories: '2188.00', upload_date: 2019-12-31T21:41:56.604Z },
{ calories: '1079.00', upload_date: 2019-12-31T21:43:06.372Z },
{ calories: '2188.00', upload_date: 2019-12-31T21:42:56.577Z },
{ calories: '445.00', upload_date: 2019-12-31T21:42:45.559Z },
{ calories: '1170.00', upload_date: 2019-12-31T21:42:28.609Z },
{ calories: '445.00', upload_date: 2019-12-31T21:42:15.793Z },
{ calories: '1079.00', upload_date: 2019-12-31T21:42:05.049Z } ]

现在在这个例子中,上传日期是相同的,这很好,但它应该返回的是{calories:sum of all, upload_date:"2019-12-31"} 如果这里有 7 天,我需要总共有 ​​7 个条目。

我尝试过的:

我已经尝试了使用 Date 对象和一些数组过滤的几种变体,但我没有得到我满意的结果,并希望从这里获得更好的方法。

需要有一个循环,比较对象中所有键的日期对象,如果它们相等,则将 (+=) 添加到该特定日期的总和值;如果有更多条目,则继续并重复,直到添加了所有对象值并考虑到日期。

最佳答案

您可以使用 .reduce 函数添加数组的每个元素,

array.reduce((acc, el) => {}, {});

其中 el 是原始数组的一个元素。

现在有了你在 .reduce 中使用的累加器,你可以使这个对象的键成为一个日期字符串——重要的是! - 不包括时间。一种方法是通过 new Date().toDateString();,它给出类似 Fri Jan 03 2020

的内容
var reduced = array.reduce((acc, el) => {
let newKey = new Date(el.upload_date).toDateString();
if (acc[newKey]) {
acc[newKey] += Number(el.calories);
} else {
acc[newKey] = Number(el.calories);
}
return acc;
}, {});

现在您的“简化”对象应该看起来像 {'Fri Jan 03 2020' : 300, 'Sat Jan 04 2020' : 324, }

关于javascript - 遍历对象并添加日期范围内的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59581339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com