首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种内置的方法来将值范围与JavaScript中的值范围进行匹配?

是否有一种内置的方法来将值范围与JavaScript中的值范围进行匹配?
EN

Stack Overflow用户
提问于 2017-08-07 12:41:05
回答 1查看 44关注 0票数 1

假设我在list items中的某个位置有一个值,该值的范围是3-10

然后假设我使用5-15中的一个范围进行搜索。

由于搜索范围的低端(5)落在列表中的条目(3-10)的范围内,因此它应该匹配。

为此,我必须检查搜索中的任一范围值是否落在条目的范围值之间,反之亦然。

虽然我有一个用于此的工作函数,但我想知道在JavaScript中是否有通用模式或内置方法来执行这种“范围矩阵”过滤。我甚至不知道这类事情是否有一些实际的命名。

预期行为:https://repl.it/Jz6c/0

EN

回答 1

Stack Overflow用户

发布于 2017-08-07 14:37:04

也许这更像是一个Code Review问题,而不是一个堆栈溢出问题,但既然我们在这里...

基于your repl.it demo,您似乎在问是否有更简单的方法来编写此代码:

代码语言:javascript
运行
复制
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(),每个对象参数都有一个minmax属性。

这段代码总共进行了八次比较(四次调用matchesRange,每次两次比较)。

只需进行两次比较,就可以完成整个过程。让我们去掉matrix命名法,因为这似乎使它听起来比实际情况更复杂。相反,如何使用名为rangesOverlap()的函数

代码语言:javascript
运行
复制
function rangesOverlap( one, two ) {
    return one.min < two.max && two.min < one.max;
}

这就是你所需要的!尝试此updated version of your repl.it,并将结果与原始结果进行比较。

如果你想知道这么简单的东西是如何工作的,我邀请你阅读this Hacker News discussion,在那里我和其他一些人讨论了这个话题。(我是那里的“平流镜”,但特别要看看"barrkel“的评论,它列出了这个问题的真值表,大约占页面的三分之一。)

讨论的背景是两个任命是否冲突。例如,1-2 2pm和2-3 2pm的约会不会冲突,即使第一个约会在第二个约会开始的同时结束。如果您对重叠范围的定义不同,因此1-2和2-3将被视为重叠,则应该能够使用<=而不是<来执行此操作

代码语言:javascript
运行
复制
function rangesOverlap( one, two ) {
    return one.min <= two.max && two.min <= one.max;
}

但公平地说,我还没有测试过这个版本的代码。

请注意,这并不是JavaScript所特有的。同样的问题和解决方案几乎适用于任何编程语言。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45539539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档