#科技进步#时间永远是自己的

javascript系列--多种方法实现取数组中的最大值和最小值

一、前言

在开发中,有时候会遇到如何取出数组中的最大值或者最小值,但是你知道有几种方法来实现这个需求呢?


二、Math.max方法

javascript原生提供了Math函数。Math函数中的Math.max和Math.min方法。

Math.max()返回数组中最大值。

Math.min()返回数组中最小值。

Math.max([value1[,value2, ...]])

说明:用的是 MDN 的写法,这个方括号是用来表示该参数非必填,可以传也可以不传。

注意:

(1)如果参数中有不能转换为数值的元素,结果肯定是NaN。

(2)max是Math中的静态方法,直接Math.max(),而不是Math的实例方法,不需要new Mat。

(3)如果没有参数,结果为-Infinity(负无穷大)

我们来开一下需要注意地方的例子:

1、如果参数中有不能转换为数值的元素,返回NaN

Math.max(true,1,0,false,5)     //5
Math.max(true,'2',null)     //2
Math.max(1,[])    //1

Math.max(1,'5','a')    //NaN
Math.max(1, undefined)    //NaN
Math.max(1, {})    //NaN
Math.max(1,function(val){return val})   // NaN


2、如果没有参数,结果为-Infinity。Math.min(),没有参数的时候,结果为Infinity。

Math.min()     //Infinity   无穷大
Math.max()     //-Infinity   负无穷大

var a = Math.min();
var b = Math.max();
a>b  //true

3>Math.min()   //false
3>Math.max()   //true

'3'>Math.min()   //false
'3'>Math.max()   //true



三、遍历方法

这个方法被称为最原始的方法。

var arr = [60, 4, 100, 81, 2, 16, 23, 8];

var result = arr[0];
for (var i = 1; i < arr.length; i++) {
    result =  Math.max(result, arr[i]);
}
console.log(result);    //100


四、reduce方法

既然是通过遍历数组求出一个最终值,那么我们就可以使用 reduce 方法:

var arr = [60, 4, 100, 81, 2, 16, 23, 8];
function max(prev, next){
      return Math.max(prev, next);
}
console.log(arr.reduce(max));    //100


或者可以高阶函数reduce。

var arr = [60, 4, 100, 81, 2, 16, 23, 8];
function Max(array) {
    return array.reduce((a,b)=>a > b ? a : b)
};
Max(arr);    // 100

说明:如果传入一组正确的参数给Math.max方法,返回的结果都是"number"类型的,而你这个并没有进行类型转化,两者的结果并不一致。当然这得看实际的需求需不需要进行类型转化,以及“最大”和“最小”是依据什么来判断的。


五、排序方法

先对数组进行一次排序,那么最大值就是最后一个值:

var arr = [60, 4, 100, 81, 2, 16, 23, 8];
arr.sort((a,b) => {return a - b});
console.log(arr[arr.length - 1]);   //100

注意:sort会改变原数组


六、eval方法

Math.max支持多个参数来比较的,name我们需要将一个数组转换成参数传进Math.max中,eval就是其中一种。

var arr = [60, 4, 100, 81, 2, 16, 23, 8];
var max = eval("Math.max(" + arr + ")");
console.log(max);    // 100

说明:这个地方理解有点困难,我们知道给eval()传入字符串,如果字符串是表达式的话就会被执行。那是因为数组已经被转换为字符串,隐式转换,相当于var max = eval("Math.max(arr+'')");



七、apply方法

使用 apply 也可以将数组转换成参数传进Math.max中。

var arr = [60, 4, 100, 81, 2, 16, 23, 8];
console.log(Math.max.apply(null,arr));    // 100


八、使用ES的扩展运算符

使用 ES6 的扩展运算符,将数组转换成参数传进Math.max中。

var arr = [60, 4, 100, 81, 2, 16, 23, 8];
console.log(Math.max(...arr));    // 100

说明:扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,扩展运算符(...)可以将一个数组转变为用逗号分隔的参数序列


九、总结

Math.max方法这个是js自身的内置的方法,速度肯定是最快的。可以使用:遍历,reduce,排序,eval,apply,ES6的扩展运算符。

【注:我是saucxs,也叫songEagle,松宝写代码,文章首发于sau交流学习社区https://www.mwcxs.top),关注我们每天阅读更多精彩内容】


感谢你的阅读,本文由 sau交流学习社区 版权所有。
如若转载,请注明出处:sau交流学习社区-power by saucxs(程新松)(/page/762.html)
交流咨询
    官方QQ群
    群号663940201,欢迎加入!
    sau交流学习社区交流群

图文推荐

saucxs聊天机器人
saucxs
hi ,欢迎来到sau交流学习社区,欢迎与我聊天,问我问题哦!