gpt4 book ai didi

javascript - 用时间跨度计算每天分配的有效方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:45:36 24 4
gpt4 key购买 nike

我有一个问题想解决,但我觉得我没有以最有效的方式解决它。对此有任何新的看法表示赞赏。

这是我要看的时间跨度

start = '2013-01-01';
end = '2013-01-08';

有一个包含开始和结束日期的作业列表

assignments = [{start: '2013-01-01', end: '2013-01-01'},
{start: '2013-01-01', end: '2013-01-02'},
{start: '2013-01-01', end: '2013-01-03'},
{start: '2013-01-01', end: '2013-01-04'}];

我想得到一个结果,时间跨度中的每个日期都有一个值,表示当天有多少作业处于事件状态。这就是我想要的结果:

result = [{date: '2013-01-01', value: 4},
{date: '2013-01-02', value: 3},
{date: '2013-01-03', value: 2},
{date: '2013-01-04', value: 1},
{date: '2013-01-05', value: 0},
{date: '2013-01-06', value: 0},
{date: '2013-01-07', value: 0},
{date: '2013-01-08', value: 0}];

我的尝试包括遍历 daterange 中的每个日期并检查当天有多少作业。我也尝试过另一种方式,遍历分配,然后是它的开始和结束日期,将每个日期的值插入数组。

这些方法是否正确,或者是否有更智能、更有效的方法?

注意:我使用带下划线的 javascript 和用于日期的 moment js 来执行此操作。

最佳答案

iterating through assignments and then its start and end dates, pushing a value into an array for each date

不确定您的意思是否正确。不是推送到数组,而是将日期(作为字符串键)映射到它们各自的计数(整数)的对象应该足够了。这里的基本方面是您可以按日期直接处理计数(无循环)。

Are either of those ways on the right path or is there a smarter more efficient way?

两者都在正确的道路上。它们中的哪一个更有效取决于您的数据,基本上分配在您的日期范围内(甚至可能超出?)的分布有多稀疏。

Having
a := number of assignments
d := average duration of assignments (number of days per assignment)
n := number of days in your range
then the runtimes would be
O(a*d) for iterating assignments and their duration
O(a*d+n) for that and building a result with all days
O(a*n) for iterating days and checking all assignments

由于您的结果结构是范围内日期的数组,因此您的第一种方法可能是更合适的选择。

如果您有非常大的数据集,并且可能有一些作业超出了您的日期范围,那么对作业进行排序可能会给您带来额外的好处,因为您可以轻松过滤掉不相关的作业。

关于javascript - 用时间跨度计算每天分配的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16769913/

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