取出一组数中最大、最小数,你有什么好方法?

234 阅读2分钟

「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战」。

前言

在项目中,我们不乏会经常遇到需要取最大数或者最小数的场景

当然,要完成这个可以说相对还是比较容易的,实现方式也可以说五花八门,大不了就用for一遍

但是其实Math对象就已经提供了一个非常好用的api,今天笔者就来分享一下Math对象提供的比较大小的能力

关于min和max

关于max

max函数会返回一组数中其中最大的数

由于 max 是 Math 的静态方法,所以应该像这样使用:Math.max(),而不是创建的 Math 实例的方法(Math 不是构造函数)

传送门:MDN关于Math.max的解释

关于min

min函数会返回一组数中其中最小的数

使用方式和max函数一致

传送门:MDN关于Math.min的解释

先看个例子

先来看个题目,先分析一下以下代码会输出什么

var min = Math.min(), max = Math.max()	
console.log(min < max);  

结果是 false,不知道你答对了没

在解析一下为什么输出的是 flase 之前,我们看看min和max在返回值上有什么规则

关于 min 和 max的返回值

Math.min():

  • 返回参数中最小的值
  • 如果没有参数,则返回 Infinity
  • 如果有某个参数为 NaN,或是不能转换成数字的非数字值,则返回 NaN

Math.max():

  • 返回参数中最大的值
  • 如果没有参数,则返回 -Infinity
  • 如果有某个参数为 NaN,或是不能转换成数字的非数字值,则返回 NaN
关于min和max的参数问题

参与min和max方法统计的参数需要一 一传入函数中,即为:

Math.min(1,3,5,7,9)  //1	
Math.max(2,4,6,8,10)  //10

可能会有同学会说,如果我想比较一个数组内的数,还要把数组遍历一遍岂不是多此一举了?如果是直接遍历数组确实有点多此一举了,不过我们有其他办法~

就是利用apply函数

function getMinByArry(arry){	
   Math.min.apply(null, arry)	
}		
function getMaxByArry(arry){	
   Math.max.apply(null, arry)	
}

如果你已经用上了ES6,那么就更好啦,直接用ES6的解构赋值就完事了

Math.min(...arry)	
Math.max(...arry)