js双值范围检查

时间:2012-11-01 19:22:52

标签: javascript numbers range

var value1=50
var value2=140

group 1
a,b     a>=42 a<=126    , b>=140 b<=213
a,c     a>=42 a<=126    , c>=1.40 c<=2.13
b,a     b>=140 b<=213   , a>=42 a<=126
c,a     c>=1.40 c<=2.13 , a>=42 a<=126

group 2
d,e     d>=91 d<=443 , e>=58 e<=84
d,f     d>=91 d<=443 , f>=4.8 f<=7
e,d     e>=58 e<=84  , d>=91 d<=443
f,d     f>=4.8 f<=7  , d>=91 d<=443

需要将其编程为js,以便两个值将检查适当数字范围的数字范围。我希望让它扫描第一组,如果没有成功找到两个范围,以适应它与第二组检查的两个值。

我为此尝试了许多不同的方法,但我不知道如何做到这一点?

非常感谢

2 个答案:

答案 0 :(得分:1)

我首先要设置一个简单的地图,其中包含将在检查中使用的值。请记住,这段代码完全是我的头脑而未经过测试,但它可能会给你一个起点。

似乎a,b等值是静态的。所以你可以设置一张地图来帮助你:

var groupOneRanges =
{
    a: { min: 42,  max: 126  },
    b: { min: 140, max: 213  },
    c: { min: 1.4, max: 2.13 }
};

var groupTwoRanges = 
{
    d: { min: 91,  max: 443 },
    e: { min: 58,  max: 84  },        
    f: { min: 4.8, max: 7   }
};

然后,您可以使用一个小循环和一个数组自动设置每个组中范围的排列:

var groupOnePairs = [];
for (var p1 in groupOneRanges) {
    for (var p2 in groupOneRanges) {
        if (p1 !== p2) {
            groupOnePairs.push({ v1: groupOneRanges[p1], v2: groupOneRanges[p2]});
        }
    }
}

您可以重复使用该代码来创建groupTwoPairs,但我将其作为练习留给您。

一旦你有了范围组合,你就必须进行比较:

var value1 = 50;
var value2 = 154;
var found = false;

// check group 1 first
for (var i = 0, c = groupOnePairs.length; i < c; i++) {
    if (value1 >= groupOnePairs[i].v1.min && value1 <= groupOnePairs[i].v1.max) {
        if (value2 >= groupOnePairs[i].v2.min && value2 <= groupOnePairs[i].v2.max) {
            // found a suitable range!
            found = true;
            break;
        }
    }
}

if (!found) {
    // check group 2 for each of the values as done above
}

还有很大的改进空间,但这是我能想到的最简洁的JS。

答案 1 :(得分:1)

如下所示:http://jsbin.com/ipefuf/1/

它有点冗长 - 可以缩短,但大致是你需要的。从它开始。

(function(){

  var value1=50;
  var value2=140;  

  var groups = [
    {
      name: "group 1",
      ranges: [
        { name: "a,b", func: function(a,b){ return a>=42 && a<=126 && b>=140 && b<=213; } },
        { name: "a,c", func: function(a,c){ return a>=42 && a<=126 && c>=1.40 && c<=2.13; } },
        { name: "b,a", func: function(b,a){ return b>=140 && b<=213 && a>=42 && a<=126; } },
        { name: "c,a", func: function(c,a){ return c>=1.40 && c<=2.13 && a>=42 && a<=126; } }
      ]
    },
    {
      name: "group 2",
      ranges: [
        { name: "d,e", func: function(d,e){ return d>=91 && d<=443 && e>=58 && e<=84; } },
        { name: "d,f", func: function(d,f){ return d>=91 && d<=443 && f>=4.8 && f<=7; } },
        { name: "e,d", func: function(e,d){ return e>=58 && e<=84 && d>=91 && d<=443; } },
        { name: "f,d", func: function(f,d){ return f>=4.8 && f<=7 && d>=91 && d<=443; } }
      ]
    }
  ];

  var inRange = false;

  for(var groupIndex in groups)
  {
    var group = groups[groupIndex];    

    for(var rangeIndex in group.ranges)
    {
      var range = group.ranges[rangeIndex];      
      inRange = range.func(value1, value2);

      if(inRange)
      {
        alert("Group: " + group.name + ", Range: " + range.name);
        break;
      }      
    }

    if(inRange)
    {
      break; 
    }
  }

  if(!inRange)
  {
    alert("Not in range."); 
  }

})();
相关问题