假设两个数分别为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
这样咱们就能够经过一个简单的关系表达式求出最大值和最小值了。