也许这是一个多堆栈溢出问题上Code Review问题的,但由于我们在这里......
基于your repl.it demo,它看起来像你问有写这个代码更简单的方法:
var matchesRange = function(min, max, value) {
return value >= min && value <= max;
};
var matchesRangeMatrix = function(searchRange, targetRange) {
return matchesRange(searchRange.min, searchRange.max, targetRange.min) ||
matchesRange(searchRange.min, searchRange.max, targetRange.max) ||
matchesRange(targetRange.min, targetRange.max, searchRange.min) ||
matchesRange(targetRange.min, targetRange.max, searchRange.max);
};
,你叫matchesRangeMatrix()
有两个对象的参数,每个都有一个min
和max
财产。
此代码总共进行八次比较(四次调用matchesRange
,每次比较两次)。
只需进行两次比较就可以完成整个任务。让我们拿出matrix
命名法,因为这似乎使它听起来比它更复杂。相反,如何调用rangesOverlap()
函数:
function rangesOverlap(one, two) {
return one.min < two.max && two.min < one.max;
}
这就是你需要的全部!试试这个updated version of your repl.it并将结果与您的原始结果进行比较。
如果您想知道如此简单的工作方式,我邀请您阅读this Hacker News discussion,我和其他一些人就此话题进行了辩论。 (我在那里是“Stratoscope”,但特别要查找“barrkel”约三分之一的注释,列出此问题真值表的一条评论。)
该讨论的上下文是两个约会是否有冲突。例如,下午1-2点和下午2-3点的约会将会产生冲突而不是冲突,即使第一次会在第二次开始的同时结束。如果您的重叠范围的定义是不同的,所以1-2和2-3将被视为重叠,你应该能够通过使用<=
代替<
做到这一点:
function rangesOverlap(one, two) {
return one.min <= two.max && two.min <= one.max;
}
但公平的警告,我有未测试此版本的代码。
请注意,这不是特定于JavaScript的任何东西。相同的问题和相同的解决方案将适用于几乎所有的编程语言。
可以发布输入和期望的输出? – Selvakumar
不,没有AFAIK ... – Li357
如何声明搜索范围?作为最小值和最大值,还是有效值列表?你只处理整数吗? –