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,以便两个值将检查适当数字范围的数字范围。我希望让它扫描第一组,如果没有成功找到两个范围,以适应它与第二组检查的两个值。
我为此尝试了许多不同的方法,但我不知道如何做到这一点?
非常感谢
答案 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.");
}
})();