- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个表单,用户可以在其中添加 X 行,每行都有开始时间和结束时间输入。
用户可以随意添加行,时间可以不按顺序输入,但提交表单时不能冲突。
到目前为止,我能够检查冲突,使用几个 for 循环并对照其余时间检查每个开始和结束时间。
我面临的问题显然是,如果第 1 行和第 2 行发生冲突,我的代码将记录两个冲突(逻辑上正确!)
我只想展示第一个冲突,解决了这个问题,自然是第二个冲突。
我的代码:
$('form').submit(function(event){
event.preventDefault();
var errors = [];
var data = serializedToObject($(this).serializeArray());
for(var i = data.row.length; i--;) {
for(var s = data.start.length; s--;) {
if(s != i) {
if(data.start[i] < data.end[s] && data.start[s] < data.end[i]) {
errors.push('Conflict between ' + data.row[i] + ' and ' + data.row[s]);
}
}
}
}
if(errors.length === 0) {
this.submit();
} else {
console.log(errors);
}
});
(serializedToObject只是将表单数据转换为对象)
那么我如何让我的代码只将 1 个冲突推送到数组?
我尝试将行 ID 添加到对象并将其推送到数组,但它不会在以后记录其他冲突,例如第1行与第2行和第4行冲突,第1行和第4行之间的冲突不再赘述,因为第1行已经在数组中。
最佳答案
我有一个答案给你,但效率不高(同样是 O(n^2),正如你在问题中的编码)。
如果我理解正确,data.start.length 和 data.row.length 必须相等,对吧?如果是这样,如果你从 i-1 到 0 计算 s,并且错误是 (1,2) 和 (2,1) , (1,2) 不会被咳嗽,因为第二个循环从 i-1 开始,在i=1的情况下,s直接从0开始。看看下面的代码(只包括for循环):
var length = data.row.length;
for( var i = length; i>0; i-- ) {
for( var s = i-1; s>0; s-- ) {
if(data.start[i] < data.end[s] && data.start[s] < data.end[i]) {
errors.push('Conflict between ' + data.row[i] + ' and ' + data.row[s]);
}
}
}
我希望有人会提出意见来优化它,如果可能的话可能是 O(n) :D。但这对你有用,如果你没有像 100.000
这样大的 length
变量,它会很好地工作!
关于javascript - 检查时间冲突,只想显示 1 个警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28213751/
我目前在我的 master 分支上。我需要 CSS 方面的帮助,但不幸的是我的网站受身份验证保护。这使得其他人很难来我的站点进行调试。我计划开始一个新的分支,fixing_css,第一次提交删除所有身
我是一名优秀的程序员,十分优秀!