【发布时间】:2020-02-13 22:36:17
【问题描述】:
如果有人能想到更好的标题,我愿意接受。无论如何,我一直在努力让它产生正确的输出几个小时,但并没有让它在所有情况下都能正常工作。
简单地说,我有一个固定日期列表,包括一个范围内的每一天,我需要在提供的日期数组中生成一个日期之间的间隔数组。 p>
所以在下面的例子中:
fixed dates: [2019-09-23, 2019-09-24, 2019-09-25, 2019-09-26, 2019-09-27, 2019-09-28, 2019-09-29]
given dates: [2019-09-23, 2019-09-24, 2019-09-26, 2019-09-27, 2019-09-28]
第一个数字是 0,因为开放日期和提供的日期之间没有间隔。然后从那里只是每个日期之间的差距:
[0, 1, 2, 1, 1, 2]
为了更清楚地说明我们如何获得这些数字:
[2019-09-23, 2019-09-24, 2019-09-25, 2019-09-26, 2019-09-27, 2019-09-28, 2019-09-29]
[2019-09-23, 2019-09-24, 2019-09-26, 2019-09-27, 2019-09-28]
0 1 2 1 1 2
一段时间后我让它工作正常,但还有另一个因素,每个日期都有相关的数据,如果连续有两个或多个相同的数据,我们也会跳过一天。请注意,数据和给定日期具有相同的长度,因此具有相同的索引。因此,在下面的示例中连续两个值,我们也跳过它,因此所需的输出如下:
fixed dates: [2019-09-23, 2019-09-24, 2019-09-25, 2019-09-26, 2019-09-27, 2019-09-28, 2019-09-29]
given dates: [2019-09-23, 2019-09-24, 2019-09-26, 2019-09-27, 2019-09-28]
given data: [82.0, 85.5, 85.5, 85.0, 86.5]
desired output: [0, 1, 3, 1*, 1, 2]
- 已跳过 必须跳过,否则列表中的元素过多。
我不会发布我尝试过的内容,因为我认为它不是那么好,而且会影响答案。但我尝试了任何方法,从查找日期之间的差异,到在 for 循环中使用简单的增量,每次跳过日期时都会增加。
如果初始固定日期和第一个给定日期之间存在差异,则数组中的第一个数字不会为零,而是差异。
这是一些数据和所需的输出:
fixed dates: [2019-09-23, 2019-09-24, 2019-09-25, 2019-09-26, 2019-09-27, 2019-09-28, 2019-09-29, 2019-09-30, 2019-10-01, 2019-10-02, 2019-10-03, 2019-10-04]
given dates: [2019-09-23, 2019-09-24, 2019-09-26, 2019-09-27, 2019-09-28, 2019-10-01]
given data: [82.0, 85.0, 84.0, 85.0, 86.5, 84.0]
desired output: [0, 1, 2, 1, 1, 3, 3]
fixed dates: [2019-09-09, 2019-09-10, 2019-09-11, 2019-09-12, 2019-09-13, 2019-09-14, 2019-09-15, 2019-09-16, 2019-09-17, 2019-09-18]
given dates: [2019-09-10, 2019-09-11, 2019-09-12, 2019-09-13, 2019-09-15, 2019-09-17]
given data: [85.0, 81.0, 85.0, 85.0, 83.0, 85.5]
desired output: [1, 1, 1, 3, 2*, 2, 2]
* skipped
Must skip otherwise there will be too many elements.
fixed dates: [2019-09-09, 2019-09-10, 2019-09-11, 2019-09-12, 2019-09-13, 2019-09-14, 2019-09-15, 2019-09-16, 2019-09-17, 2019-09-18, 2019-09-19, 2019-09-20, 2019-09-21, 2019-09-22]
given dates: [2019-09-10, 2019-09-11, 2019-09-12, 2019-09-13, 2019-09-15, 2019-09-17, 2019-09-18, 2019-09-19, 2019-09-20, 2019-09-21]
given data: [85.0, 81.0, 85.0, 85.0, 83.0, 85.5, 85.0, 86.0, 85.0, 84.5]
desired output: [1, 1, 1, 3, 2*, 2, 1, 1, 1, 1, 2]
* skipped
Must skip otherwise there will be too many elements.
fixed dates: [2019-09-09, 2019-09-10, 2019-09-11, 2019-09-12, 2019-09-13, 2019-09-14, 2019-09-15, 2019-09-16, 2019-09-17, 2019-09-18, 2019-09-19, 2019-09-20, 2019-09-21, 2019-09-22]
given dates: [2019-09-10, 2019-09-11, 2019-09-12, 2019-09-13, 2019-09-15, 2019-09-16, 2019-09-17, 2019-09-18, 2019-09-19, 2019-09-20, 2019-09-21]
given data: [85.0, 81.0, 85.0, 85.0, 83.0, 83.5, 85.5, 85.0, 85.0, 85.0, 84.5]
desired output: [1, 1, 1, 3, 2*, 1, 1, 1, 3, 2*, 1*, 2]
* skipped
Must skip otherwise there will be too many elements.
我想这可能有点太难了,但我想我还是会发布它,看看是否有人能想出一个好的解决方案。
【问题讨论】:
-
您能开发出如何获得您的阵列
[0, 1, 2, 1, 1, 2]吗?也就是(至少跟在 0 后面的 1 和 2) -
@user753642 不确定您的意思...问题是如何从提供的数据中获取该数组。这就是为什么它旁边会显示
desired output。 -
你在解释这个数组应该包含所提供日期之间的间隔......但是你知道它的逻辑生成(如果是,为什么它应该是给定输入数据的所需输出中的 1)或您是否要求我们对将输入映射到所需输出的函数进行逆向工程? (他们给你什么的)
-
@user753642 1 代表一天,如果像第一个示例
2019-09-24, 2019-09-26那样有 2 天的差距,我们得到 2。开头的零是开头的特殊情况是第一个固定日期和第一个给定日期之间的差距,在第一个例子中没有差距,所以它是 0。 -
@user753642 在我的问题开头附近添加了另一个示例,以更清楚地显示日期间隔。
标签: javascript arrays