我正在为我的论文制作一个应用程序,我需要帮助解决一个具体的问题。让我先描述一下我想实现的功能。
在我的前端,我希望用户能够选择约会日期和时间。我考虑的方法是让他选择一个特定的日期。当他提交日期时,我希望以下面的方式生成一个可用时间段数组。
在我的数据库中,我有商店对象。每个商店都有一个约会数组。每个约会都有一个开始时间和结束时间。为了简单起见,我将每个约会的时间段设置为30分钟,例如,如果开始时间是14:00,结束时间是14:30。因此,在客户提交日期后,我用查询检索该特定日期的所有约会。同样为了简单起见,我的商店每天从8:00到21:00营业。
考虑到这一点,我想创建一个从8:00开始到21:00结束的数组,时间间隔为30分钟。但我想基于现有约会动态地创建这个数组,这意味着如果有一个约会从14:30开始,那么14:30 - 15:00的时间段将不会插入数组中。
我有一个粗糙的方法来做这件事,通过硬编码一个数组与所有时隙从8:00到9:00,然后数组动态约会时隙。然后我做了第三个数组过滤数组。我希望你的帮助,找到一种方法来做这件事更动态,以便有不同的开放时间在商店和不同的持续时间为每个约会的特点。
例如
const shop = {
user: "fakeid123",
title: "Barber Shop",
description: "fake description",
appointments: [{
customername: "Kostas",
start: "12:00",
end: "12:30"
},
{
customername: "Makis",
start: "13:00",
end: "13:30"
},
{
customername: "Kostas",
start: "14:00",
end: "14:30"
},
{
customername: "Kostas",
start: "17:00",
end: "17:30"
}
],
opens: "8:00",
closes: "21:00"
};
根据上面的示例,数组应为:
[
8: 00 - 8: 30
8: 30 - 9: 00
9: 00 - 9: 30
9: 30 - 10: 00
10: 30 - 11: 00
11: 00 - 11: 30
11: 30 - 12: 00
12: 30 - 13: 00
13: 30 - 14: 00
14: 30 - 15: 00
15: 00 - 15: 30
....
16: 30 - 17: 00
18: 00 - 18: 30
...
20: 30 - 21: 00
]
时隙12:00-12:30 13:00-13:30 14:00-14:30 and 17:00-17:30
不在阵列中
我这样做是为了向客户呈现一个下拉菜单,其中有可用的时间段可供选择。
开始和结束字段都是字符串,但都是时间格式。我如何迭代它们来创建数组呢?提前感谢
3条答案
按热度按时间x6492ojm1#
您将获得一个包含
shop.opens
和shop.closes
的时间范围。这是一个非常好的起点。您可以从中生成约会的其他时间范围。请这样考虑:希望这对你有帮助,你也能理解。
编辑:我保留了“开门”和“关门”字段的会议记录,这样你就可以预料到如果一家商店在8:30开门。
3phpmpom2#
如果你有一个预留插槽的数组,并想得到一个可用插槽的数组,你需要一个所有插槽的数组无论如何(预留和可用的)。可以迭代所有插槽的数组,过滤掉另一个数组中的预留插槽,但这似乎不是很有效。
我想建议一个不同的方法:我有一个包含所有插槽的数组(默认情况下所有插槽都可以保留),然后使用一个简单的标志来指示插槽是否被保留。这将允许我们轻松地过滤原始数组,并获得一个包含空闲插槽或保留插槽的数组,这取决于您当前需要哪一个:
注:我还使用了日期类型而不是常规字符串,因为它更容易生成类似于
generateSlots
函数的列表。z2acfund3#
最简单的方法是使用lodash库,它提供了许多数组函数。
您要查找的是_.xor
https://lodash.com/docs/4.17.15#xor
参见示例:https://jsfiddle.net/domus71/1n0voakc/
科斯季斯