在小数范围内搜索

Search within a decimal range

var a = {28.82:0, 28.91:0, 29.11:0, 30.11:0, 32.22:0, 32.23:0, 32.24:0};

function check(range) // range = 28.90;
if (a[range]){
  // do stuff here... 
}

如您所见,在上述情况下,条件永远不会成立。我想编写一个逻辑,它考虑范围的 +/- 0.01 以检查数组内部。

我曾想过通过范围检查函数驱动所有数组元素,但那太昂贵了。

有什么想法吗?

让我们看看我是否理解正确。
您需要定义一个公差:

var a = [28.82, 28.91, 29.11, 30.11, 32.22, 32.23, 32.24];

function check(range) { // range = 28.90;
  for (var i = 0; i < a.length; i++) {  
    if (Math.abs(a[i] - range) <= 0.01) {
      // do stuff here... 
    }
  }
}

a[i] - range 将产生您要查找的值和数字之间的差值。 0.01是设定的公差。

可能我理解错了,你就不能这样做吗?

var a = {28.82:"a", 28.91:"b", 29.11:"c", 30.11:"d", 32.22:"e", 32.23:"f", 32.24:"g"};

function check(range){
    if (a[range] || a[range+0.01] || a[range-0.01]){
          // do stuff here... 
    }
}

还是您担心的方法太贵了?

请注意,如果 a[range] 处的值等于零或假,逻辑检查 if(a[range]) 将 return 假。如果您希望代码 运行 只要 属性 存在,无论其值如何,您都需要稍微修改您的条件以解决这些边缘情况。

编辑:正如@SaniHuttunen 在评论中指出的那样,您可以使用 if(a[range] !== undefined)

完成此操作
function check(range){
    function propExists(key){
        return a[key] !== undefined;
    }
    if (propExists(range) || propExists(range+0.01) || propExists(range-0.01){
        // do stuff here... 
    }
}

知道它介于哪两个元素之间会有帮助吗?

var a = [28.82, 28.91, 29.11, 30.11, 32.22, 32.23, 32.24];

function check(arr, range) {
    var match = [];
    arr.reduce(function(prev, curr){
        if ( prev <= range && range <= curr ) { match = [prev, curr]; }
        return curr;
    })
    return match;
}

console.log(check(a, 30.90));
// [30.11, 32.22]

JSFiddle 演示。