web-dev-qa-db-ja.com

JavaScriptを使用して、最小値と最大値の間の数値を制限するにはどうすればよいですか?

私は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でこれを行うにはどうすればよいですか?ありがとう。

55
Alexandra

このような

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);
8
T.J. Crowder

Lodashの clamp メソッドを使用します。

_.clamp(22, 1, 20) // Outputs 20

6

これ以上の説明は不要です。

function clamp(value, min, max) {
    return Math.min(Math.max(value, min), max);
}
2
Lonely Neuron

つかいます Math.minおよびMath.max

1
Femaref

関連: セグメントに数値をキャップする最もエレガントな方法は何ですか?

ECMAScript 2017の更新:

Math.clamp(x, lower, upper)

ただし、今日の時点ではステージ1 提案 であることに注意してください。広くサポートされるまで、 polyfill を使用できます。

0
Rafe