web-dev-qa-db-ja.com

値が2つの数値の間にある場合

値が数値の範囲内にあるかどうかをテストできるようにしたい。これは私のjQueryコードです...

if ((year < 2099) && (year > 1990)){
    return 'good stuff';
}

JQueryでこれを行う簡単な方法はありますか?たとえば、次のようなものがあります...

if (1990 < year < 2099){
    return 'good stuff';
}
12
Inigo

多くの言語では、2番目の方法は、必要なものに関して左から右に誤って評価されます。

たとえば、Cでは、1990 < yearは0または1に評価され、次に1 < 2099になります。これは、もちろん常にtrueです。

JavascriptはCに非常に似ています:1990 < yeartrueまたはfalseを返し、これらのブール式は数値的にそれぞれ0と1に等しいように見えます。

しかし、C#では、コンパイルすらできず、エラーが発生します。

エラーCS0019:演算子 '<'は、タイプ 'bool'および 'int'のオペランドには適用できません

Rubyからも同様のエラーが発生しますが、Haskellは同じ中置式で<を2回使用できないと指示しています。

私の頭の上のPythonは、私が確実に「間」のセットアップをそのように処理する唯一の言語です:

>>> year = 5
>>> 1990 < year < 2099
False
>>> year = 2000
>>> 1990 < year < 2099
True

一番下の行は、最初の方法(x < y && y < z)が常に最も安全な方法であるということです。

22
Mark Rushakoff

あなたはあなた自身の方法を作ることができます:

// jquery
$(function() {
    var myNumber = 100;
    try {
        if (myNumber.isBetween(50, 150)) 
            alert(myNumber + " is between 50 and 100.");
        else 
            alert(myNumber + " is not between 50 and 100.");
    } catch (e) {
        alert(e.message());
    }

});

// js prototype
if (typeof(Number.prototype.isBetween) === "undefined") {
    Number.prototype.isBetween = function(min, max, notBoundaries) {
        var between = false;
        if (notBoundaries) {
            if ((this < max) && (this > min)) between = true;
            alert('notBoundaries');
        } else {
            if ((this <= max) && (this >= min)) between = true;
            alert('Boundaries');
        }
        alert('here');
        return between;
    }
}

お役に立てれば。

マックス

9
Max Sylvester

これをすばやく簡単に行うには、次のような関数を作成します。

function inRange(n, nStart, nEnd)
{
    if(n>=nStart && n<=nEnd) return true;
    else return false;
}

次に、次のように使用します。

inRange(500, 200, 1000) => this return true;

またはこのように:

inRange(199, 200, 1000) => this return false;
2
khalid

ここで同様のソリューションから: http://indisnip.wordpress.com/2010/08/26/quicktip-check-if-a-number-is-between-two-numbers/

$.fn.between = function(a,b){
    return (a < b ? this[0] >= a && this[0] <= b : this[0] >= b && this[0] <= a);
}
0
Allan Taylor

ブール演算子が気に入らない場合は、ネストされたifステートメントを常に使用できます。

if (1990 < year)
{
    if( year < 2099)
        return 'good stuff';
}
0
dckrooney