数値が2つの値の間にあるかどうかを確認する方法は?


144

JavaScriptでは、ウィンドウサイズが500pxを超える場合にブラウザに何かをするように指示しています。私はそれをそのようにします:

if (windowsize > 500) {
    // do this
}

これはうまくいきますが、私はこれと同じ方法を適用したいと思いますが、数値の範囲があります。それで、ウィンドウサイズが500pxから600pxの間である場合、ブラウザに何かをするように伝えたいと思います。私はこれがうまくいかないことを知っていますが、これは私がそれを想像した方法です

if (windowsize > 500-600) {
    // do this
}

これはJavaScript内でも可能ですか?


9
この質問を閉じるには少し厳しいようです。投票して再開することはできますか?それはよく書かれていて、サンプルコードを提供します。
Caltor、2015

確かに、より正確なチェックはif(windowsize> = 500 && windowsize <= 600)またはif(!(windowsize <500 || windowsize> 600))
SPlatten

回答:


225

windowsizeより大きいか500小さいかをテスト600し、値500600それ自体も条件がtrueにならないことを意味します。

if (windowsize > 500 && windowsize < 600) {
  // ...
}

1
未定義のおかげで、ウィンドウサイズが500pxより大きく600px未満で、基本的に500-600pxの範囲内でのみ機能する場合、これがブラウザー内で私が望むことを実行することを確認するだけですよね?(私はこれはあまり上手ではありませんlol)
Dyck

1
@Dyckはい、そうです:)、jQueryはJavaScriptライブラリにすぎないことに注意してください。
未定義

7
この条件は、windowsizeが501px以上599px以下の場合にのみ当てはまることに注意してください。500pxと600pxは除外されます。これらの値を含めたい場合は、比較に等式を追加します。
Robert Koritnik、2015年

3
ただ、詳細が、次の方法がより読みやすい:if(500 < windowsize && windowsize < 600)
ジョバンニBenussi

119

少し時間がありましたので、あなたはすでに回答を受け入れましたが、私は次のことを貢献したいと思いました。

Number.prototype.between = function(a, b) {
  var min = Math.min.apply(Math, [a, b]),
    max = Math.max.apply(Math, [a, b]);
  return this > min && this < max;
};

var windowSize = 550;

console.log(windowSize.between(500, 600));

JS Fiddleデモ

または、数値がエンドポイントを含む定義された範囲内にあることを確認するオプションが必要な場合:

Number.prototype.between = function(a, b, inclusive) {
  var min = Math.min.apply(Math, [a, b]),
    max = Math.max.apply(Math, [a, b]);
  return inclusive ? this >= min && this <= max : this > min && this < max;
};

var windowSize = 500;

console.log(windowSize.between(500, 603, true));

JS Fiddleデモ

コメントに記載されているように、上記にマイナーな修正を追加するために編集されました-

Function.prototype.apply()遅いです!一定量の引数があるときにそれを呼び出すことは無意味です...

Function.prototype.apply()最初に「包括的」オプションなしで上記のメソッドの修正バージョンを生成するの使用を削除する価値がありました。

Number.prototype.between = function(a, b) {
  var min = Math.min(a, b),
    max = Math.max(a, b);

  return this > min && this < max;
};

var windowSize = 550;

console.log(windowSize.between(500, 600));

JS Fiddleデモ

そして、「包括的」オプションを使用して:

Number.prototype.between = function(a, b, inclusive) {
  var min = Math.min(a, b),
    max = Math.max(a, b);

  return inclusive ? this >= min && this <= max : this > min && this < max;
}

var windowSize = 500;

console.log(windowSize.between(500, 603, true));

JS Fiddleデモ

参照:


6
なぜ直接のように呼び出すのではなく、applyを使用するのMain.min(a,b)ですか?Function.prototype.applyは遅いです!一定量の引数があるときにそれを呼び出す以外に、無意味です。
スチールブレイン

これをデフォルトのツールボックスに追加します-非常に便利で、この貢献に感謝します!
SidOfc 2015年

@SteelBrain:ポイントがあります!私はそれを反映するように答えを更新しましたが、私は-最初に- を使用する理由Function.prototype.apply()があったのではないかと思いますが、それが何であったのか、またはそうであったのかはわかりません。
デビッドはモニカ

6
Numberオブジェクトを変更しない関数を作成する方がはるかに優れています。これはアンチパターンであり、ECMA標準がNumber.between()関数を含むように変更された場合、または別のライブラリまたは別のコードが別の定義Number.prototype.betweenで別の場所で定義されている場合に遭遇します。代わりに、ヘルパー関数を作成して使用してください!
モナークワディア

2
@MonarchWadiaあなたの主張は、ネイティブオブジェクトの変更/拡張は悪い習慣であると理解していますが、これをすべての場所で説教することは少し不必要だと思います(違反はありません)。「ネイティブオブジェクトを変更しないでください」と見た回数は数えられません。私にとってこれは、家庭用ナイフを売っている人が、危害があった場合に売り手が責任を負うようなナイフを売るたびに買い手にナイフの危険の可能性について警告するようなものです。危険は常識であるべきです。ユーザーが無視するかどうかはユーザー次第です。
akinuri

80

コードが変数が範囲値の間にあることをコードが検証しているという追加のヒントを与えるために、変数を内側に置くことを好みます

if (500 < size && size < 600) { doStuff(); }

13
このスタイルが好き!:)
Kaii

2
それはPythonのに近いですので、これは、私の好みであるmin < testval < max構文
daveruinseverything

@GouravChawlaこの答えのコードスニペットの例について話していますか?私のコードスニペットはPythonで、比較に使用されました
daveruinseverything

@GouravChawla誰もそう言ってなかった 何に同意しないかは不明です。
daveruinseverything

28

古い質問ですが、私のような人には役立つかもしれません。

lodash持っている_.inRange()機能をhttps://lodash.com/docs/4.17.4#inRange

例:

_.inRange(3, 2, 4);
// => true

この方法はLodashユーティリティライブラリを利用し、インストールされているバージョンのLodashにアクセスする必要があることに注意してください。


2
終了値は含まれていませんのでご注意ください。例えば。_.inRange(10, 0, 10) // => false
Lucio

OPが質問の範囲をに制限したためJavascript、このメソッドはLodashユーティリティライブラリを利用し、インストールされているバージョンのLodashへのアクセスが必要であることは注目に値します。
Chaya Cooper、

2

あなたifは書く代わりに条件で複数の節を使うことができます

if (windowsize > 500-600) {
    // do this
}

これは論理的に意味をなさないので、JavaScriptは次のようなif条件を読み取ります

windowSize > -100 

計算500-600するので-100

あなたは&&両方のケースを厳密にチェックするために使用する必要があります例えばこれはこのようになります

if( windowSize > 500 && windowSize < 600 ){

// Then doo something

}

0

ブートストラップのモーダル値を表示および非表示にするために、このjQueryのこのビットを実装しました。ユーザーのテキストボックスエントリの値の範囲に基づいて、さまざまなフィールドが表示されます。

$(document).ready(function () {
    jQuery.noConflict();
    var Ammount = document.getElementById('Ammount');

    $("#addtocart").click(function () {

            if ($(Ammount).val() >= 250 && $(Ammount).val() <= 499) {
                {
                    $('#myModal').modal();
                    $("#myModalLabelbronze").show();
                    $("#myModalLabelsilver").hide();
                    $("#myModalLabelgold").hide();
                    $("#myModalPbronze").show();
                    $("#myModalPSilver").hide();
                    $("#myModalPGold").hide();
                }
            }
    });

6
簡単な関数にjQueryを使用することは2013年のオプションかもしれませんが、今日は不可能です
mgamsjager

3
本当ですが、私は人々が今日でもそれを使用するのではないかと心配しています
mgamsjager

1
好奇心から:なぜ今よりも簡単な関数にjQueryを使用するほうが悪いのですか?
Julix

2
@Julixはほとんどパフォーマンスですが、この場合は無視できます。一般的なポイントは「必要のないときはjQueryを使用しないこと」ですが、これらのコメントは議論を(再)開始する場所ではありません。これを楽しんでください:) i.stack.imgur.com/sGhaO.gif
Luca

これはソリューションの単なる実装です。OPはすでに値にアクセスできます。したがって、jQuery $().val()は無関係であり、必要ありません。しかし、繰り返しになりますが、元のバージョンの質問では、OPは単純な算術チェックのためにjQueryについて言及しています。(ため息)それが最初の間違いです。
akinuri

0

可能な最短の方法は次のとおりです。

if (Math.abs(v-550)<50) console.log('short')
if ((v-500)*(v-600)<0) console.log('short')

パラメータ化:

if (Math.abs(v-max+v-min)<max+min) console.log('short')
if ((v-min)*(v-max)<0) console.log('short')

最初の1つがどのように機能するかわからない場合は、両側を2で割ることができます;)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.