javascript - 给定一个存储为 [{name, value},...] 的区间,我如何找到 x 所在的位置?

标签 javascript intervals

为了方便地说明这个例子,我有一个这样的间隔:

        -6        -3        0         3        6                  
<-------o---------o---------o---------o--------o------->
  danger| warning |                   | normal | good

我将其存储为一个对象,(-3 到 3 之间没有任何注意)

编辑:这是我得到的数据结构,无法进行任何更改。

{ name: 'good', value: 6 },
{ name: 'normal', value: 3 },
{ name: 'warning', value: -3 },
{ name: 'danger', value: -6 },

给定一个值 x我想确定它的位置。所以如果:

  • x = 3 or 4 ,它将返回 normal
  • x = 6 or 100 ,它将返回 good
  • x = -1 or 1 or -2 ,它将返回 ''(因为没有为这些间隔分配任何内容)
  • 对于负数也是如此

我在 js 中的实现是循环遍历每个对象,如果它是 >= ,它会覆盖。但我会再次为底片编写相同的代码,但使用 <= ,有没有人有更好的实现方式?

var x = 4;
var returnInterval = '';
for (var point in interval) {
   if (x >= interval[point].value) {
       returnInterval = interval[point].name;
   }
}

return returnInterval;

最佳答案

考虑像这样定义您的范围:

[
  { name: 'good', range: [6, Infinity },
  { name: 'normal', range: [3, 6] },
  { name: 'warning', value: [-6, -3] },
  { name: 'danger', value: [-Infinity, -6] }
]

利用现有数据,您可以像这样构建这样一个范围:

var points = [
  { name: 'danger', value: -6 },
  { name: 'warning', value: -3 },
  { name: 'normal', value: 3 },
  { name: 'good', value: 6 }
];

// PRE CONDITION: elements are sorted by value (ascending)
var prev = -Infinity;

for (i = 0, j = 0; i <= points.length; ++i) {
  var current = i == points.length ? Infinity : points[i].value;

  if (prev >= 0 || current <= 0) {
    points[j].range = [prev, current];
    ++j;
  }

  prev = current;
}

它基本上跳过具有负开始值和正结束值的段。

然后,您可以对每个区域进行简单的边界检查。

function name(value)
{
  for (var i = 0; i != points.length; ++i) {
    var range = points[i].range;
    if (value >= range[0] && value <= range[1]) {
      return points[i].name;
    }
  }
  return '';
}

检查是 >=、>、< 还是 <= 的具体细节由您决定。

关于javascript - 给定一个存储为 [{name, value},...] 的区间,我如何找到 x 所在的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27895726/

相关文章:

区间并集

mysql - 在 MySQL 日期间隔中,1 个月与 30 天相同吗? 1 QUARTER 和 3 MONTH 一样吗?等等?

javascript - JS 中的间隔比较不会爆炸

python - auto arima python 中的预测区间

c# - 在 UpdatePanel 中的 ASP.NET AJAX 回发期间更新客户端 javascript 数组变量的最简单方法?

Javascript 打开和隐藏 radio

javascript - 使用 Node.js 和 JavaScript 从缓冲区渲染 PDF

javascript - Puppeteer 无法在 Heroku 上运行

c - 查找 C 中 N 个案例之间的偶数

javascript - NodeJS 模块化