私は2つの値の間の数を制限したい、私はPHPでこれを行うことができることを知っている:
$number = min(max(intval($number), 1), 20);
// this will make $number 1 if it's lower than 1, and 20 if it's higher than 20
複数のif
ステートメントなどを記述することなく、javascriptでこれを行うにはどうすればよいですか?ありがとう。
このような
var number = Math.min(Math.max(parseInt(number), 1), 20);
少なくとも2つのオプションがあります。
条件演算子(? :
):
number = number > 100 ? 100 : number < 0 ? 0 : number;
または、Math.max
およびMath.min
:
number = Math.min(100, Math.max(0, number));
どちらの場合も、自分を混乱させるのは比較的簡単なので、複数の場所でこれを行う場合は、ユーティリティ機能を検討することをお勧めします。
function clamp(val, min, max) {
return val > max ? max : val < min ? min : val;
}
次に:
number = clamp(number, 0, 100);
Lodashの clamp メソッドを使用します。
_.clamp(22, 1, 20) // Outputs 20
これ以上の説明は不要です。
function clamp(value, min, max) {
return Math.min(Math.max(value, min), max);
}
つかいます Math.min
およびMath.max
。
関連: セグメントに数値をキャップする最もエレガントな方法は何ですか? :
ECMAScript 2017の更新:
Math.clamp(x, lower, upper)
ただし、今日の時点ではステージ1 提案 であることに注意してください。広くサポートされるまで、 polyfill を使用できます。