假设两个数分别为a,b
条件判断形式
比较直观形式就是条件判断
var max = (a: number, b: number) => a > b ? a : b; var min = (a: number, b: number) => a < b ? a : b;
把上面类似的逻辑抽取成一个函数
var get = (p: 1 | -1) => (a: number, b: number) => (a - b) * p > 0 ? a : b; var max = get(1); var min = get(-1);
非条件判断形式
上面逻辑其实类似,都有条件判断,那么有没有一种去除条件判断的方式呢?
其实可以通过代数关系来看
一个数和它绝对值的关系 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
这样我们就可以通过一个简单的关系表达式求出最大值和最小值了。