6

これは、数値が範囲内 (他の 2 つの数値の間) にあるかどうかをチェックアウトする方法です。

var a = 10,
    b = 30,
    x = 15,
    y = 35;

x < Math.max(a,b) && x > Math.min(a,b) // -> true
y < Math.max(a,b) && y > Math.min(a,b) // -> false

コードでこの計算を何度も行う必要があり、より短い同等のコードを探しています。

これは私が思いついた短いバージョンです。しかし、私はそれがもっと短くなることができると確信しています:

a < x && x < b
true
a < y && y < b
false

しかし、欠点は、繰り返しxたり、y

4

4 に答える 4

23
Number.prototype.between = function (min, max) {
    return this > min && this < max;
};

if ((5).between(4, 6)) {
    alert('worked!');
}

var num = 6;
if (num.between(5, 7)) {
    alert('still worked!');
}

http://jsfiddle.net/jbabey/4jjRm/1/

数値リテラルを括弧で囲む必要があることに注意してください。そうしないと、インタープリターはプロパティが小数点であると見なして爆発します。

于 2012-10-09T18:42:56.457 に答える
2

これを何度も行うinRange(a, b, x)必要がある場合は、必要なときにいつでも短い関数呼び出しになるように、関数を作成するだけです。このようにして、関数本体の長さを気にすることなく、難読化を少し軽減することもできます。

于 2012-10-09T18:42:23.483 に答える
0

最初に最小値と最大値を見つけずに、数値が 2 つの数値の間に収まるかどうかをテストする柔軟性が必要な場合:

let inRange = (num1, num2, numTest) => {
  [min, max] = [num1, num2].sort((a, b) => a > b);
  return numTest > min && numTest < max;
}

低から高へのテスト:

inRange(1, 5, 3); // true
inRange(1, 5, 6); // false

高から低へのテスト:

inRange(5, 1, 3); // true
inRange(5, 1, 6); // false
于 2017-03-24T14:53:25.723 に答える