阅读 12

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

JavaScript专题系列是自己阶段性成长的见证,希望通过文章的形式更加严谨、客观地梳理js的相关知识,也希望能够帮助更多的前端开发的朋友解决问题,期待我们的共同进步。

如果觉得本系列不错,欢迎点赞、评论、转发,您的支持就是我坚持的最大动力。


前言

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

Math.max

JavaScript 提供了Math.max 函数返回一组数中最大值,用法是:

Math.max([value1[,value2,...]])
复制代码

值得注意的是: 1、如果有任意一个参数不能转化为数值,则结果为NaN。 2、max是Math的静态方法,所以应该这样使用 Math.max();而不应该作为Math实例的方法(简单来说,就是不能使用new) 3、如果没有参数,则结果为 -Infinity (注意是负无穷大);

而我们需要分析的是: 1、如果任意一个参数不能转换为数值,这就意味着如果参数可以被转换成数字,都是可以比较的,比如:

Math.max(true,0) // 1
Math.max(true,'2',null) // 2
Math.max(1,undefined) // NaN --> undefined 不能转化为数值
Math.max(1,{}) // NaN
复制代码

2、如果没有参数,则结果为 -Infinity 对应的 Math.min 函数 如果没有参数则结果为 Infinity 所以:

var min = Math.min();
var max = Math.max();
consoele.log(min>max);
复制代码

原始方法

最原始的方式,就是循环遍历一遍。

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));
复制代码

排序

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

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系列目录

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

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

关注下面的标签,发现更多相似文章
评论