Javascript搜索范围
Javascript Search Ranges
我有一个JSON值列表
[{'start_day':1,'start_hour':1,'end_day':1,'end_hour':2},
{'start_day':1,'start_hour':4,'end_day':1,'end_hour':6},
{'start_day':1,'start_hour':9,'end_day':1,'end_hour':11}]
现在,在Javascript中,我有了一个表,可以将更多这些添加到表中。我可以这么做,没问题,但我要找的是。有没有任何代码可以让我搜索,以确保用户没有输入重叠的日期时间范围。类似于SQL Between命令。
由于您指的是7天x 24小时的范围,因此创建一个由所有值组成的表可能很有用。这样做的优点是不必对每个新元素重复计算。相反,你可以加一个计数器。
在您的情况下,计数器应该始终为零或一(因为根据定义,日期可能不重叠)。然而,相同的函数也可以用于确定给定一组对象是否存在重叠。然后,其中一个计数器大于一。
代码(演示:http://jsfiddle.net/EtaJE/1/):
// Initialize list and variables.
var totalHours = 7*24;
var dates = []; // Empty list
for (var i=0; i<totalHours; i++) dates.push(0);// Fill list with zeros
/* @param listi object { start_day ; end_day ; start_hour ; end_hour }
* @param one number Recommended values: 1 (add), -1 (remove)
*/
function addDate(listi, one) {
one = +one === one ? one : 1; // Make sure that one is a number.
var listi = list[i];
if (listi.start_day <= listi.end_day) {
var start = listi.start_day * 24 + listi.start_hour;
var end = listi.end_day * 24 + listi.end_hour;
for (var j=start; j<end; j++) {
dates[j] += one; // Increase counter by one
}
} else {
var start = listi.start_day * 24 + listi.start_hour;
var end = listi.end_day * 24 + listi.end_hour;
for (var j=0; j < end; j++) {
dates[j] += one; // Increase counter by one
}
for (var j=start; j<totalHours; i++) {
dates[j] += one; // Increase counter by one
}
}
}
/*
* @param object { start_day ; end_day ; start_hour ; end_hour }
*/
function doesDateOverlap(listi) {
if (listi.start_day <= listi.end_day) {
var start = listi.start_day * 24 + listi.start_hour;
var end = listi.end_day * 24 + listi.end_hour;
for (var j=start; j<end; j++) {
if (dates[j]) return true; // Not zero, overlapping!
}
} else {
var start = listi.start_day * 24 + listi.start_hour;
var end = listi.end_day * 24 + listi.end_hour;
for (var j=0; j < end; j++) {
if (dates[j]) return true; // Not zero, overlapping!
}
for (var j=start; j<totalHours; i++) {
if (dates[j]) return true; // Not zero, overlapping!
}
}
return false; // At this point: No overlap, so OK.
}
// Parse the values from the JSON list. Example:
var list = [{'start_day':1,'start_hour':1,'end_day':1,'end_hour':2},
{'start_day':1,'start_hour':4,'end_day':1,'end_hour':6},
{'start_day':1,'start_hour':9,'end_day':1,'end_hour':11}]
for (var i=0; i<list.length; i++) {
addDate(list[i], 1);
}
// Example
if (doesDateOverlap({'start_day':1,'start_hour':1,'end_day':1,'end_hour':11})){
alert('Overlap!');
}
相关文章:
- 用程序搜索JQuery数据表中的文本
- 正在全局范围中查找JavaScript函数
- 在十进制范围内搜索
- 组合2个表单字段进行范围搜索
- 搜索包含包含所需值的范围的数组
- 在同一项目上使用多个范围值进行搜索
- 在验证Symfony2中的搜索表单后更新AngularJS范围
- 在 Algolia 即时搜索范围滑块的最大值末尾添加“+”
- 带数据表的日期范围选择器-can't搜索未来日期
- Javascript搜索范围
- 数据表上的日期范围选择器插件.可以't排序和搜索
- Angular对value的搜索范围
- 数组字段的弹性搜索日期范围过滤器
- 是否有一种方法可以使用javascript/jquery来搜索一组li标签并缩小搜索范围
- 限制搜索范围与搜索小部件/地理编码器
- 谷歌自定义搜索排序日期范围标准不工作
- 如何在jQuery数据表中添加日期范围的自定义搜索
- 当我开始打字时,缩小搜索结果的范围
- Phoenix-使用DataTables的站点范围搜索功能
- 我可以将地图限制为只在谷歌地图融合层的范围内搜索吗?