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系列目录
- #1 【深入学习js之——原型和原型链】
- #2 【深入学习js之——词法作用域和动态作用域】
- #3 【深入学习js之——执行山下文栈】
- #4 【深入学习js之——变量对象】
- #5 【深入学习js之——作用域链】
- #6 【深入学习js之——实际开发场景中的this指向】
- #7 【深入学习js之——执行上下文】
- #8 【深入学习js之——闭包】
- #9 【深入学习js之——参数按值传递】
- #10 【深入学习js之——call和apply】
- #11 【深入学习js之——类数组对象与arguments】
- #12 【深入学习js之——创建对象的各种方式以及优缺点】
- #13 【深入学习js之——继承的多种方式和优缺点】
欢迎添加我的个人微信讨论技术和个体成长。

