2011-09-06 15 views
1

我在找寫代碼的這麼一點點了一個簡單的方法聲明:簡單的替代增加一倍,如果JavaScript的

if (a > max) 
    a = max; 
if (a < min) 
    a = min; 

是什麼在JavaScript來做到這一點,最簡單的方法?

+2

爲什麼這對你來說不夠簡單?只是讓它成爲一個功能。 – Ibolit

+1

你想檢查兩個條件一個接一個或檢查第二個條件,如果第一個是假的? –

+1

@哈里:但是如果'max'小於'min'呢? ;-) –

回答

4
a = (a > max) ? max : a; 
a = (a < min) ? min : a; 

甚至

a = (a < min) ? min : (a > max) ? max : a; 
+0

我會隨時選擇雙重if語句! (重新編輯:這是一個更好的;)) –

+0

沒有它不容易閱讀,恕我直言。原來也沒有工作。也許我不應該困擾。 – NimChimpsky

+0

我發現括號雖然冗餘,但使三元操作更清晰:a =(a> max)? max:a' –

3

使用Math.maxMath.min

a = Math.max(min, Math.min(max, a)); 

如果你希望可讀性那麼這樣的事情可能會更好:

function bounded(val, min, max) { 
    if (val < min) { 
     return min; 
    } else if (val > max) { 
     return max; 
    } else { 
     return val; 
    } 
} 

這是很容易理解,因爲一旦冗長是它唯一的定義不是一個主要問題。使用這樣的:

a = bounded(a, 0, 10); 
+2

但我不確定這是否更好。調用函數(更慢,即使值在有效範圍內也是兩個函數調用),並且更難以閱讀。 – Thilo

+2

我同意。只是想提出一個替代方案。 –

+0

謝謝你們!想想也許這裏有一個簡寫符號,可能使用三元運算符。我會堅持我所擁有的! – Mansiemans

2
a = Math.max(Math.min(a, max), min); 

這是真的簡單?

+0

+1質疑整個想法。 – Thilo

0

我覺得代碼是有點難以解釋了幾個原因:兩行

  • 單線if而分裂
  • 它正試圖限制一個範圍內的值,但沒有明確說明。

所以我發現下面的壓痕與評論更好,更簡單,更清晰:

// Limit a to the [min,max] interval 
if (a > max) a = max; 
if (a < min) a = min; 

加分點:它使明顯,我們假設分鐘<最大。