在小数范围内搜索

时间:2015-03-18 22:12:22

标签: javascript logic

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来检查数组内部。

我想通过范围检查功能驱动所有数组元素,但这太贵了。

有什么想法?

3 个答案:

答案 0 :(得分:2)

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

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是套装。

答案 1 :(得分:1)

也许我误会了,但你不能这样做吗?

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... 
    }
}

或者你担心的方法太贵了?

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

编辑:正如@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... 
    }
}

答案 2 :(得分:1)

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

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演示。