gpt4 book ai didi

javascript - 检查时间冲突,只想显示 1 个警告

转载 作者:行者123 更新时间:2023-11-30 17:04:50 25 4
gpt4 key购买 nike

我有一个表单,用户可以在其中添加 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/

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