1
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つの値が適切な数値範囲の数値範囲をチェックするようにする必要があります。2番目のグループでチェックする両方の値に適合する2つの範囲がうまく見つからない場合、最初のグループをスキャンすることを検討しています。

いろいろな方法を試してみたのですが、どうすればよいでしょうか?

大変助かります

4

2 に答える 2

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 です。

于 2012-11-01T19:46:56.803 に答える
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."); 
  }

})();
于 2012-11-01T19:47:38.493 に答える