JavaScript专题之如何求出数组的最大值和最小值

JavaScript专题系列是本身阶段性成长的见证,但愿经过文章的形式更加严谨、客观地梳理js的相关知识,也但愿可以帮助更多的前端开发的朋友解决问题,期待咱们的共同进步。前端

若是以为本系列不错,欢迎点赞、评论、转发,您的支持就是我坚持的最大动力。es6


前言

取出数组中的最大值和最小值是常见的需求,可是你能想出来多少种方式来实现这种需求呢?数组

Math.max

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

既然是经过遍历数组求出一个最终的值,那么咱们就可使用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]);
复制代码

eval

Math.max 支持传递多个参数来进行比较,那么咱们如何将一个数组转换为参数传递进去Math.max函数呢?eval即是一种

var arr = [6,4,1,8,2,11,23];
var max = eval("Math.max("+ arr +)");
console.log(max);
复制代码

apply

使用apply 是另一种

var arr = [6,4,1,8,2,11,23];
console.log(Math.max.apply(null,arr));
复制代码

ES6

使用es6的扩展运算符

var arr = [6,4,1,8,2,11,23];
console.log(Math.max(...arr));
复制代码

深刻学习JavaScript系列目录

欢迎添加个人我的微信讨论技术和个体成长。

欢迎关注个人我的微信公众号——指尖的宇宙,更多优质思考干货

相关文章
相关标签/搜索