假設兩個數分別爲a,b函數
比較直觀形式就是條件判斷code
var max = (a: number, b: number) => a > b ? a : b; var min = (a: number, b: number) => a < b ? a : b;
把上面相似的邏輯抽取成一個函數get
var get = (p: 1 | -1) => (a: number, b: number) => (a - b) * p > 0 ? a : b; var max = get(1); var min = get(-1);
上面邏輯其實相似,都有條件判斷,那麼有沒有一種去除條件判斷的方式呢?class
其實能夠經過代數關係來看co
一個數和它絕對值的關係 a <= |a|
再來看這個關係式 |a - b|
若a > b
,則爲a - b
,不然就是 -a + b
;此時最大值分別爲a和b,若咱們把a + b
加上|a - b|
會獲得什麼呢?若是a > b
,則結果爲 2a
, 不然爲 2b
;所以咱們把結果除以2便獲得最大值。即
max(a, b) = (a + b + |a - b|) / 2
同理可得
min(a, b) = (a + b - |a - b|) / 2
這樣咱們就能夠經過一個簡單的關係表達式求出最大值和最小值了。