JavaScript专题系列是本身阶段性成长的见证,但愿经过文章的形式更加严谨、客观地梳理js的相关知识,也但愿可以帮助更多的前端开发的朋友解决问题,期待咱们的共同进步。前端
若是以为本系列不错,欢迎点赞、评论、转发,您的支持就是我坚持的最大动力。es6
取出数组中的最大值和最小值是常见的需求,可是你能想出来多少种方式来实现这种需求呢?数组
JavaScript 提供了Math.max 函数返回一组数中最大值,用法是:微信
Math.max([value1[,value2,...]])
复制代码
值得注意的是: 一、若是有任意一个参数不能转化为数值,则结果为NaN。 二、max是Math的静态方法,因此应该这样使用 Math.max();而不该该做为Math实例的方法(简单来讲,就是不能使用new) 三、若是没有参数,则结果为 -Infinity (注意是负无穷大);闭包
而咱们须要分析的是: 一、若是任意一个参数不能转换为数值,这就意味着若是参数能够被转换成数字,都是能够比较的,好比:app
Math.max(true,0) // 1
Math.max(true,'2',null) // 2
Math.max(1,undefined) // NaN --> undefined 不能转化为数值
Math.max(1,{}) // NaN
复制代码
二、若是没有参数,则结果为 -Infinity 对应的 Math.min 函数 若是没有参数则结果为 Infinity 因此:函数
var min = Math.min();
var max = Math.max();
consoele.log(min>max);
复制代码
最原始的方式,就是循环遍历一遍。post
var arr = [6,4,1,8,2,11,23];
var result = arr[0];
for(var i = 1;i<arr.length;i++){
result = Math.max(result,arr[i])
}
console.log(result);
复制代码
既然是经过遍历数组求出一个最终的值,那么咱们就可使用reduce方法:学习
var arr = [6,4,1,8,2,11,23];
function max(prev,next){
return Math.max(prev,next);
}
console.log(arr.reduce(max));
复制代码
若是咱们先对数组进行一次排序,那么最大的值就是最后一个值:ui
var arr = [6,4,1,8,2,11,23];
arr.sort(function(a,b){
return a - b;
})
console.log(arr[arr.length-1]);
复制代码
Math.max 支持传递多个参数来进行比较,那么咱们如何将一个数组转换为参数传递进去Math.max函数呢?eval即是一种
var arr = [6,4,1,8,2,11,23];
var max = eval("Math.max("+ arr +)");
console.log(max);
复制代码
使用apply 是另一种
var arr = [6,4,1,8,2,11,23];
console.log(Math.max.apply(null,arr));
复制代码
使用es6的扩展运算符
var arr = [6,4,1,8,2,11,23];
console.log(Math.max(...arr));
复制代码
欢迎添加个人我的微信讨论技术和个体成长。